IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

PyInstaller et Subprocess


Sujet :

Déploiement/Installation Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut PyInstaller et Subprocess
    Bonjour à tous,

    J'ai développé un script Python qui fait appel à subprocess.Popen(....) pour lancer un sous-processus. Et je souhaite pouvoir arrêter ce subprocess quand je clique sur un bouton, j'utilise donc la méthode subprocess.kill(). Tout ça fonctionne très bien lorsque je lance mon script avec Python.

    Le problème est lorsque je "compile" ce script avec PyInstaller. Lorsque je clique sur mon bouton, le sous-processus n'est pas détruit.
    Ou plutôt, en fait, PyInstaller crée 2 processus (du nom de mon sous-processus). On les voit dans le TaskManager de Windows. Et quand je clique sur le bouton (donc appel à subprocess.kill()), il y a bien 1 processus qui est détruit. Mais le second persiste et tourne toujours en mémoire. Et ce même si je ferme l'application "parente" Python.

    Donc que faut-il faire pour détruire les 2 processus (le mien et celui créé par PyInstaller) lorsque je clique sur mon bouton ?

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    Cela est en effet étrange... Avez-vous essayé de compiler votre programme avec un autre compilateur comme py2exe par exemple ? Cela nous permettrai de savoir si le probleme vient de pyinstaller lors de la compilation ou si le programme à une faille...

    A bientot...

    Mickael

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Heu ... oui, j'ai tenté d'utiliser Py2exe, mais je ne sais pas comment l'utiliser correctement, et donc je n'arrive pas à intégrer certains modules. Du coup, impossible de tester .....

    Le fait que PyInstaller crée 2 processus semble normal, du moins d'après ce que j'ai lu et compris. C'est comme cela qu'il fonctionne. Mais le problème c'est que quand je "kill" mon processus, l'autre (de PyInstaller) n'est pas détruit.
    Et celui-ci subsiste et tourne même après fermeture "complète" de l'application Python.

    C'est peut-être dû au fait que le subprocess.Popen(...) est appelé dans un Thread (module threading) ? Je précise ici que si le subprocess est correctement détruit, alors le Thread est obligatoirement terminé lui aussi.
    Le script fonctionne parfaitement bien lorsque je le lance directement avec Python.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    Donc nous savons maintenant que le problème vient de pyinstaller, malheureusement ce n'est pas moi qui pourrait vous aider la dessus puisque je n'ai jamais utilisé pyinstaller, et pour cause, py2exe marchait pour moi ^^. Il faudrai voir dans la documentation de pyinstaller voir s'il explique comment killer leur process et j'invite tous ceux qui ont eu le meme probleme à témoigner ici...

    Toutefois, si py2exe peut règler votre problème (on ne sait jamais), voila simplement comment compiler avec py2exe, si vous voulez plys d'information sur py2exe, je vous invite à aller sur le site officiel ou à publier un autre topic dans la rubrique de py2exe:
    * Installer py2exe (evident ^^)
    * Placer tous vos fichier ".py" de votre programme dans la racine de votre dossier python (par défaut : C:\python x.x)
    * Creer un fichier setup.py dans votre dossier python
    Voila le contenu basic de votre setup.py pour une application sous console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from distutils.core import setup
    import py2exe
    setup(console=['hello.py'])
    * Ouvrir un invite de commane, se placer dans le dossier de python puis taper:
    python setup.py py2exe
    * Votre éxécutable se trouve dans le dossier "build"

    Bon courage...

    Mickael

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Dommage ......

    Quant à Py2exe, j'ai fait exactement ce que vous dites. Seulement, dans mon code j'utilise des modules "liés" à Tcl/Tk (par exemple "tablelist"). Et ces fichiers ne sont pas installés, le package est simplement décompressé dans le répertoire Tcl de Python.

    Et donc, après compilation avec Py2exe, lorsque je lance mon programme, j'ai un message d'erreur "tablelist module not found" (ou quelque chose du genre pour m'indiquer que tablelist n'est pas reconnu).

    Je ne sais pas comment ajouter ces modules à l'EXE en utilisant Py2exe.
    Avec PyInstaller, il suffit de modifier un peu le fichier de configuration et tout passe bien...

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    En effet, py2exe compile les modules "proprement installé" :s, je vous invite à regarder le lien suivant voir si votre module est disponible avec un installateur : http://www.lfd.uci.edu/~gohlke/pythonlibs/.

    Sinon, je pense qu'en faisant la même procédure que pour installer vos modules à python, décompressez le dossier à la racine de votre exe, il devrait retrouver les modules, malheureusement ils ne seront pas compilé dans l'exe mais cela nous permettra peut etre de voir si ce dernier fonctionne avec py2exe

    Dans le cas ou cela ne marche pas, je suis un peu limité de ce coté la ^^ et j'espère que quelqu'un d'autre vous aidera volontiers.

    Bonne chance...

    Mickael

Discussions similaires

  1. Fichier Version PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 2
    Dernier message: 30/07/2008, 22h59
  2. Compilation avec PyInstaller
    Par Jiyuu dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 29/04/2008, 20h01
  3. Toplevel et subprocess
    Par frites.saucisse dans le forum Tkinter
    Réponses: 7
    Dernier message: 31/03/2008, 11h18
  4. Programme pour PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 01/06/2007, 16h16
  5. pyinstaller sous Linux
    Par jbjweb dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 20/02/2007, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo