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

Python Discussion :

PyInstaller et subprocess.Popen


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut PyInstaller et subprocess.Popen
    Bonjour, j'ai fini mon projet est je souhaitais créer un fichier executable pour windows, j'ai donc utilisé PyInstaller pour le generer. Sa fonctionne, mon .exe est bien genéré.

    Le problème c'est que mon fichier python utilise 2 fichiers qui se lancent en parallèles et utilise ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    script_path = "upload.py"
    subprocess.Popen(["python3", script_path])
     
    script_path = "enregistre_gps_fichier_txt2.py"
    subprocess.Popen(["python3", script_path])
    Pour que mon .exe ne génère pas d'erreur je suis obligé de mettre dans le même répertoire les fichiers upload.py et enregistre_gps_fichier_txt2.py

    Je me pose donc la question sur comment faire pour me passer de ces fichiers, dois je les convertir en .exe par le meme prosédé?

    Quelqu'un pourrais t'il me renseigner? Merci

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    bonjour
    Citation Envoyé par carlita_84 Voir le message
    Pour que mon .exe ne génère pas d'erreur je suis obligé de mettre dans le même répertoire les fichiers upload.py et enregistre_gps_fichier_txt2.py
    Cette erreur arrive aussi si on n'utilise pas de ".exe" ! Il faut passer le chemin complet à ta fonction Popen.
    Pour cela, tu peux utiliser la constante __file__ puis, en extraire le chemin et ajouter les noms de fichiers.
    ps: pas compris pourquoi utiliser subprocess ! c'est même une mauvaise pratique. Il est normal en python de plutôt importer le fichier (puis de lancer la fonction principale).

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    J'utilise subprocess car j'ai mon programme principal qui utilise tkinter... Et j'ai 2 fichiers pythons qui fonctionnent en parallèles. L'un transfère par ftp des images et enregistre en base de données, le deuxième réceptionne les données du gps par le port usb. Mon programme principal utilise la caméra pour détecter des plaques...

    C 'est un peu compliquer a expliquer.

    Merci je vais tester

    Je précise que j'ai également que j'ai fais une librairie qui s'appelle fonction_sqlite3.py (je l'utilise dans mon programme principal avec "import fonction_sqlite3 #gere les requetes sql"
    ) et j'ai également une erreur si je ne place pas ce fichier dans le même répertoire que mon .exe

    C'est également un problème car j'aurais préféré que le code python ne soit pas visible a l'utilisateur

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 552
    Par défaut
    Rajoute tes scripts supplémentaires dans les scripts à empaqueter dans ton exe PyInstaller

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    J'ai essayé différentes commandes , je n'y arrive pas.

    Rajoute tes scripts supplémentaires dans les scripts à empaqueter dans ton exe PyInstaller
    Tu veux dire tout mettre dans mon fichier principal? Ou existe t'il une commande spéciale pour pyinstaller


    Pour le moment j'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python3 -m PyInstaller --onefile -w main.py
    le w supprime l'affichage de la console

    onfile pour pour faire un fichier qui contient toute les librairies


    Je vais essayer de faire 3 fichiers .exe, un pour mon interface tkinter, un autre pour mon gps, et un dernier pour l'upload de mes fichiers. C 'est pas terrible comme solution mais je n'ai pas d'autre idée...

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    Citation Envoyé par carlita_84 Voir le message
    Tu veux dire tout mettre dans mon fichier principal? Ou existe t'il une commande spéciale pour pyinstaller
    Donc, en fait tu n'as même pas pris un moment pour lire la doc ! Sinon tu ne poserais pas cette question. inclure x fichiers dans l'exe est une pratique courante et est dans la doc.

    le code python ne soit pas visible a l'utilisateur
    Il faut savoir que cet exe n'est en fait qu'une simple archive. Par conséquent le code python est visible si l'utilisateur le désire.
    Citation Envoyé par doc
    Cacher le code source
    L'application fournie n'inclut aucun code source. Cependant, PyInstaller regroupe des scripts Python compilés ( .pycfichiers). Ceux-ci pourraient en principe être décompilés pour révéler la logique de votre code.

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Je savais pas que c'etait possible, je regarde...

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 552
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Il faut savoir que cet exe n'est en fait qu'une simple archive. Par conséquent le code python est visible si l'utilisateur le désire.
    J'avais écrit ça (je l'ai supprimé), mais dans la doc, il y est écrit qu'il empaquète les fichiers en pyc (je ne sais plus si on on peut y lire le code)

  9. #9
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    J'ai essayé ceci, sans résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python3 -m PyInstaller --onefile --add-data "gps.py:." --add-data "upload.py:." main.py
    Lorsque j'execute le fichier .exe , j'ai un message dans la console qui me dis qu'il manque les fichiers concernés.

    Pour ne plus avoir le message d'erreur je suis obliger des les copier dans le repertoire dist.

    Sa semble impossible de se passer de ces fichiers.

  10. #10
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Salut,
    As-tu pris en compte le message de @papajoker (post #2) qu'il fallait utiliser le chemin absolu surtout pour un onefile ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def resource_path(relative_path):
            """Returns the absolute path to a resource"""
            return os.path.join(os.path.dirname(os.path.abspath(__file__)), relative_path)
    ...
    ...
    script_path = resource_path("upload.py")
    Possible aussi avec pathlib

  11. #11
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Comme proposé j'ai modifié mon code, j'ai fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    current_directory = os.path.dirname(os.path.abspath(__file__))
    upload_script_path = os.path.join(current_directory, "gps.py")
    subprocess.Popen(["python3", upload_script_path])
     
     
    current_directory = os.path.dirname(os.path.abspath(__file__))
    upload_script_path = os.path.join(current_directory, "upload.py")
    subprocess.Popen(["python3", upload_script_path])
    J'ai alors lancé la création du .exe avec cette commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python3 -m PyInstaller --onefile --add-data "gps.py:." --add-data "upload.py:." --add-data "fonction_sqlite3.py:." lapivision.py
    Tout fonctionne, j'ai testé mon appli marche parfaitement. Merci pour vos commentaires

    Je laisse le lien vers mon logiciel, (il faut une caméra pour tester et créer un compte sur le site platerecognizer.com): http://electronika.fr/wordpress/2024...el-lapivision/

  12. #12
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Citation Envoyé par carlita_84 Voir le message

    Je laisse le lien vers mon logiciel, (il faut une caméra pour tester et créer un compte sur le site platerecognizer.com): http://electronika.fr/wordpress/2024...el-lapivision/
    Heu... 378 mégas pour des sources zippées, nan merci

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Heu... 378 mégas pour des sources zippées, nan merci
    Je viens de supprimer les fichiers images, la sa fait environs 300ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de os.system ou subprocess.Popen
    Par othke dans le forum Général Python
    Réponses: 8
    Dernier message: 28/09/2011, 12h05
  2. cacher le terminal avec subprocess.popen
    Par bender86 dans le forum Général Python
    Réponses: 1
    Dernier message: 29/08/2011, 18h05
  3. probleme subprocess. Popen
    Par shaiHulud dans le forum Général Python
    Réponses: 9
    Dernier message: 25/02/2011, 10h04
  4. Réponses: 5
    Dernier message: 16/02/2011, 10h23
  5. PyInstaller et Subprocess
    Par 4Ur3L dans le forum Déploiement/Installation
    Réponses: 5
    Dernier message: 12/12/2010, 12h45

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