Salut Yannick,

Bravo pour toutes ces idées très constructives.

Je viens d'installer ton module "tools.py", voici ce qu'il me donne, après 
l'ouverture d'un nouveau fichier.

Je pense que c'est logique, la fonction CreatePythonTools ne nécessite aucun 
paramètre, alors que tu l'appelles avec un argument dans la fonction 
événementielle onPageOpened.

Début du message d'erreur
Traceback (most recent call last):
File "plugins/tools.py", line 235, in onPageOpened
CreatePythonTools(newPage)
TypeError: CreatePythonTools() takes 0 positional arguments but 1 was given
Fin du message d'erreur

Sinon, pour tes autres idées, le forPython est à toi, tu peux y ajouter tout ce 
que tu veux.

C'est grâce à toi d'ailleurs que cette nouvelle fonctionnalité de recherche des 
versions de Python figurant sur le PC a été ajoutée.

Pour le PB que tu soulèves avec l'expression régulière, dans ton autre post, je 
pense qu'il faut ajouter l'option re.MULTILINE dans ton second argument, afin 
que le multiligne soit bien prise en compte lors du match.

Tu peux d'ailleurs cumuler cette option avec l'option re.IGNORECASE, en les 
séparant par une barre verticale.

Voilà, merci à toi.

Bien amicalement,
Abdel.
----- Original Message ----- 
  From: Yannick Youalé 
  To: [email protected] 
  Sent: Tuesday, February 16, 2016 9:50 AM
  Subject: [progliste] Re: 6pad++- amélioration au forPython- exécution de 
fichier et prise en compte de multiples versions de python


  Coucou Abdel,

  Débu de citation

  Pour ma part, j'ai aussi fait avancer un peu le travail, l'extension 
forPython comporte désormais le nécessaire pour rechercher les versions de 
Python sur le disque dur, et les afficher dans une liste de sous-menus figurant 
dans un sous-menu du menu forPython, intitulé "Activer une version de Python 
installée".

  Fin de citation


  Je l'ai testé sur un de mes ordi (avec windows 7), et malheureusement, dans 
le menu, il n'y a que 6pad++ qui apparaît.
  Mon python27 qui pourtant est directement dans le disque C est ignoré.
  Tandis que sur un autre avec windows XP tout apparaît bien (python25 et 
python27).
  Quel est ce mystère ? 

  Et j'avais une préoccupation quant au choix d'enregistrer les chemins vers 
les exécutables de python trouvés dans un objet dictionnaire.
  Les éléments dans le dictionnaire se retrouvent par une clée, qui est sensée 
être unique. Or dans ton code, la clée est le nom du dossier principale de la 
version de python.
  Ce qui risque de poser problème dans les cas où quelqu'un aurait décidé 
d'avoir plusieurs fois la même version de python sur son ordinateur. Par 
exemple une version portable et une version installée. Un cas qui est certes 
rare, mais n'en reste pas moins possible.

  A oui, j'ai vu que tu as inclu un dossier que je n'avais pas compté: le 
x:/Program Files (x86

  Dans mon code, toujours concernant le repérage des pythons installés, tu 
veras que je te propose une manière plus efficace de  parcourir les dossier.
  il s'agit de faire une itération sur les lettres alphabétiques.
  Exemple:
  alphabet="ABCDEFGHIJKL"
  for e in alphabet:
      
  # test d'existence

  Pour ce qui est de l'exécution du module courant, nous avons fait presque 
parreil.
  Cependant, une petite subtilité: moi j'ai préféré envoyé les messages 
d'erreur ou tout ce qui devrait s'afficher en console dans la console de 6pad++.

  Et pour améliorer encore cela, je prévoit en plus parser les messages 
d'erreur pour pouvoir repérer le fichier et le numéro de ligne comportant 
l'erreur, afin de s'y positionner dans l'onglet courant ou dans un nouvel 
onglet s'il s'avère qu'il ne s'agit pas du document courant. 

  Le fichier logFile est important pour retracer les erreurs, mais ne devrait 
pas être ouvert dans un nouvel onglet si les erreurs sont sensées apparaître 
dans la console de 6pad++ à mon humble avis.

  Début de citation

  pourquoi ne pas enrichir l'extension pour pouvoir compiler du code et générer 
un exécutable, du style setup.py py2exe, en supposant bien sûr que Py2exe ou un 
autre module servant à faire cela sera installé dans notre version de Python? 

  Fin de citation

  Hé bien mon petit Abdel, figures-toi que j'y pensais déja.

  Concernant le py2exe, j'ai gardé des notes qui sont sensés m'aider à le faire.
  Je vous les collerai plus bas.

  En fait, j'entrevoyais un élément de menu labélisé "Créer un exécutable"
  qui déclencherait une fonction qui, suivant la présence du py2exe ou du pypi 
ou même un autre créateur d'exécutable chez la version de python cochée 
lancerait la génération.
  Et dans le cas où plusieurs seraient repérés, pourquoi ne pas proposer le 
choix de l'un d'entre eux dans une liste ?

  Comme autres améliorations possibles, hormis celles que j'ai déjà cité plus 
haut, il y a:

  * la définition du mot clé sous le curseur et l'affichage dans la console de 
6pad++
  je travaille dessus. Quelques soucis avec les expressions régulières qui sont 
ma foi assez différentes de celles que j'ai connu dans le vb6.

  * une véritable intellicence. C'est-à-dire par exemple  taper un point, et 
faire ctrl+j ou ctrl+espace pour que la liste des objets et méthodes de l'objet 
devant lequel on a mis le point soient proposés dans une liste.
  Evitera de faire des aller et retour entre l'IDE et la documentation.

  * la vérification des lignes juste après leur modification et tentative de 
déplacement à une autre ligne.
  Il s'agit de vérifier quelques éléments de syntaxe et d'avertir directement 
en cas d'erreur supposé.
  Seront vérifiés par exemple:
  - l'équilibre des accolades, guillemets, appostrophes, parenthèses
  - la présence des deux points à la fin des lignes qui le nécessitent
  - la nécessité de ne pas mélanger de type d'indentation au début de la ligne
  On peut également se servir du même évènement pour s'assurer du respect de la 
cass pour  certains mots clé, variables et nom de fonction.
  Par exemple les True et False qui doivent avoir la majuscule en premier 
caractère.
  Ca peut d'ailleurs se corriger sans que l'utilisateur ne s'en rende compte.

  * l'insertion automatique de fonctions (constructeur, destructeur, ou 
autres), de classes (héritées ou non)
  Cela tout en vérifiant l'emplacement et les niveaux d'indentation.

  * l'insertion d'imports (modules et classes, etc...

  * la création dans le menu d'aide d'un item qui ouvrira le fichier chm de la 
version du python actuellement sélectionnée.

  * la prise en compte de projets de développement et d'options de sauvegarde.

  Bon je m'arrête là.
  Néanmoins c'est déjà assez conséquent comme vous le conviendrez avec moi 
n'est-ce pas ?

  Certains sont-ils chaud pour qu'on se partage le boulot ?

  Maintenant les notes sur comment créer un exécutable en ligne de commande 
avec le py2exe

  Début des notes

  __h2 Créer un programme exécutable avec Py2exe

  L'extension Py2exe permet de convertir un script Python en un programme 
exécutable (uniquement pour le système d'exploitation Windows).
  Ce programme exécutable (fichier avec l'extension .exe) peut ensuite être 
lancé sur un ordinateur où Python n'est pas installé.

  __h3 Téléchargement et installation de Py2exe

  Il faut un ordinateur avec Windows et Python déjà installé (attention : 
Py2exe ne supporte pas la version 3 de Python).

  Le programme d'installation de Py2exe est disponible ici :

  __Link sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

  Avec une machine 32 bits et Python version 2.7, vous devez utiliser le 
fichier suivant :

  __Link py2exe-0.6.9.win32-py2.7.exe

  Une fois téléchargé, il suffit d'exécuter ce fichier pour installer Py2exe.

  __h3 Utilisation de Py2exe

  A titre d'exemple, voici le script d'un jeu de puissance 4 :

  __Link jeu_puissance4.py

  Télécharger et enregistrer ce script dans le répertoire où est installé 
Python (chez moi, c'est le répertoire C:Python27).

  Créer le script setup.py :

  # setup.py
  from distutils.core import setup
  import py2exe

  setup(windows=["jeu_puissance4.py"]) 

  Enregistrer le script setup.py dans le répertoire courant de Python.

  __h4 Remarques

  si vous voulez disposer de la console en plus de l'interface graphique (GUI), 
remplacer setup(windows=["jeu_puissance4.py"]) par 
setup(console=["jeu_puissance4.py"])
  pour traiter plusieurs scripts en même temps, il suffit de compléter la liste 
:setup(windows=["jeu_puissance4.py","script2.py","script3.py"])

  Ouvrir l'interpréteur de commande de Windows (Démarrer   Exécuter   cmd)

  Placez-vous dans le répertoire courant de Python (commande cd : change 
directory) :

  > cd C:Python27

  puis lancer Py2exe :

  > python setup.py py2exe

  Un sous répertoire nommé dist est créé (chez moi C:Python27dist).
  Il contient le fichier exécutable jeu_puissance4.exe ainsi que toutes les 
ressources nécessaires à un fonctionnement autonome (python27.dll 
library.zip...).

  Vous pouvez maintenant copier le répertoire complet dist et le distribuer 
vers des ordinateurs qui ne possèdent pas Python.
  Le programme se lancera en exécutant le fichier jeu_puissance4.exe.

  Fin des notes

  Amicalement,


  Yannick Daniel Youalé
  La programmation est une religion. Aimez-la, ou quittez-la.
  www.visuweb.net





    ----- Original Message ----- 
    From: _Abdel_ 
    To: [email protected] 
    Sent: Monday, February 15, 2016 7:03 PM
    Subject: [progliste] Re: 6pad++- amélioration au forPython- exécution de 
fichier et prise en compte de multiples versions de python


    Salut Yannick et la ML !

    Alors, c'est la forme?

    Tout d'abord, je tenais à te féliciter Yannick pour ce super travail, tu as 
bien fait avancer le schmilblick lol !

    Pour ma part, j'ai aussi fait avancer un peu le travail, l'extension 
forPython comporte désormais le nécessaire pour rechercher les versions de 
Python sur le disque dur, et les afficher dans une liste de sous-menus figurant 
dans un sous-menu du menu forPython, intitulé "Activer une version de Python 
installée".

    Le sous-menu forPython comporte aussi une commande exécuter, activable 
grâce au raccourci clavier CTRL + F5, qui exécutera, selon la version de Python 
choisie dans le menu, la version de Python qui sera cochée et l'associera au 
module en cours d'implémentation.

    Si on veut utiliser le Python embarqué avec 6pad++, il faudra cocher le 
premier élément du sous-menu "Activer une version de Python installée", qui est 
coché par défaut.

    Il conviendra alors de sélectionner dans le module en cours d'exploration, 
la partie du code que l'on souhaite voir s'exécuter, avant de lancer le 
raccourci CTRL + F5, la sortie sera dirigée vers la console.

    Si on coche une version installée sur le PC, la sélection du code à 
exécuter ne sera pas indispensable, ce sera tout le module en cours 
d'exploration ou d'implémentation qui sera exécuté, et la sortie redirigée vers 
un fichier logFile.log, qui sera ouvert automatiquement.

    Les autres améliorations sont les suivantes :

    Les regexps servant à atteindre les classes et fonctions ont été réunies 
dans un dictionnaire, qui pourra être enrichi par d'autres regexps, au cas où 
vous souhaiteriez exploiter d'autres langages de programmation, différents du 
Python.

    La fonction événementielle onKeyUp a été mise à jour comme cité dans mon 
précédent post.

    PS:

    Pour l'exécution d'un code Python avec le Python embarqué dans 6pad++, 2 
pistes sont envisageables, elles sont très simples et ont bien été décrite par 
notre ami Cyrille, que je salue au passage :

    Première méthode :
     # Instruction servant à créer un objet qui pourra être exécuter avec exec.
    code=compile(sp.window.curPage.selectedText, sp.window.curPage.file, "exec")
    # Exécution de l'objet.
    exec(code)

    Seconde méthode, qui est encore plus simple et qui fonctionne tout aussi 
bien, elle consiste tout simplement à exécuter directement les lignes de code 
avec la fonction exec :

    exec(sp.window.curPage.selectedText)

    La sortie sera alors redirigée vers la console Python de 6pad++.

    Les fonctions compile et exec sont des fonctions appartenant au builtin de 
Python.

    Les perspectives à venir pour le forPython sont les suivantes :

    Puisque le module subprocess et ses méthodes Popen et call accepte des 
arguments dans le premier paramètre servant à définir la séquence de commandes 
à exécuter, pourquoi ne pas enrichir l'extension pour pouvoir compiler du code 
et générer un exécutable, du style setup.py py2exe, en supposant bien sûr que 
Py2exe ou un autre module servant à faire cela sera installé dans notre version 
de Python?

    Ce serait super lol !

    N'hésitez surtout pas à nous dire ce que vous pensez du travail réalisé, 
est-ce qu'il y a quelque chose à retoucher, etc.

    Voilà, merci à vous.

    Bien amicalement,
    Abdel.

      ----- Original Message ----- 
      From: Yannick Youalé 
      To: [email protected] 
      Sent: Monday, February 15, 2016 4:33 PM
      Subject: [progliste] 6pad++- amélioration au forPython- exécution de 
fichier et prise en compte de multiples versions de python


      Salut à tous,

      Je voudrais vous soumettre aujourd'hui le fruit d'une partie de mon 
travail de ces dernières semaines.

      Je l'ai regroupé dans un module temporaire nommé tools, et les prédestine 
a être intégrés au module forPython.

      Il s'agit principalement des fonctionnalités suivantes:

      * le listage comme éléments de sous-menu des versions de pythons repérés 
sur l'ordinateur courant; Ce qui donne la possibilité de cocher la version pour 
laquelle on décide de développer dans le 6pad++. Le choix est sauvegardé dans 
le fichier de configuration.

      * La création d'un menu "Exécuter CTRL+F5" qui lance l'exécution/la 
précompilation du module courant par la version du python qui a été 
préalablement sélectionnée dans les menus.

      * La création d'un menu "arrêter l'exécution" qui est sensé arrêter de 
force une exécution qui aurait été lancée par le menu précédent.

      La version du python choisie est conservée dans une variable globale 
curPythonPath qui est le chemin vers l'exécutable de ce python.

      Une liste globale nommée pythonList contient les références des autres 
pythons qui ont été détectés, et sont ordonnés selon leur position comme 
éléments du sous-menu "versions de python".

      Le 6pad++ est considéré comme un exécutable python puisqu'on peut faire 
des script pour lui. il apparaît d'ailleurs comme premier élément  du sous-menu 
"Versions de python".
      Mais je dois avouer que je n'ai pas pu jusqu'ici trouver la bonne 
formulation de ligne de commande pour qu'il renvoi erreur  ou succès à 
l'exécution par ctrl+f5.
      Peut-être allez-vous m'aider à faire la correction.

      En m'aidant de l'extension perso.py, de Cyrille, j'ai créé la fonction 
runCurPythonScript() qui est un exemple de communication par ligne de commande 
et output entre deux versions de pythons totalement différentes.

      J'espère que ça vous plaira.

      Alors, mon petit Abdel, qu'est-ce que tu en dis ?
      Quoi ? Ne me dis pas que j'arrives en retard et que tu as déja fait tout 
ça !!!

      MDR !

      A plus !


      Yannick Daniel Youalé
      La programmation est une religion. Aimez-la, ou quittez-la.
      www.visuweb.net

Répondre à