J'ai un script python sur lequel je travaille et que je compresse en un fichier exécutable avec pyinstaller.

Dans le script, lorsqu'il n'est pas compilé, je fais référence à un ensemble d'outils qui vivent dans un dossier à côté du script principal, donc quelque chose comme ceci:

\parent
    ----->\tools\
       ------>db.py
       ------>file_utils.py
main.py

J'ai omis l'init, mais il est là aussi. Dans mon script, j'importe ces fichiers comme

import tools.db
import tools.file_utils

Et tout cela fonctionne bien. Lorsque je le conditionne en tant qu'exécutable avec PyInstaller, j'obtiens une erreur de module introuvable pour les outils. J'ai essayé d'ajouter le chemin absolu vers les outils, l'ajout d'outils et les fichiers pertinents aux importations cachées, et tout cela, mais j'ai l'impression que c'est ainsi que je les appelle dans le script.

Je suppose que tous ces scripts d'aide pourraient simplement être dans le répertoire parent à côté du script, ou je pourrais ajouter des outils au sys.path et simplement importer directement db et fileutils, mais cela semble un peu saccadé et / ou encombré. Quelque chose d'évident qui me manque?

5
Michael McIntyre 15 mars 2019 à 03:28

2 réponses

Meilleure réponse

Essayer:

from tools import db
from tools import file_utils
0
Hiadore 15 mars 2019 à 01:35

Donc, après aplatissement de l'intégralité de ma structure de répertoires dans un dossier tmp pour écrire l'exécutable, et modification de mon fichier de spécifications pour ne pas compiler dans un répertoire différent (ainsi que l'ajout du répertoire parent au commutateur -p) et en pensant à supprimer un référence dans un fichier py différent à un autre module qui n'existe plus, j'ai tout fait fonctionner.

Je pense que je vais reconstituer les pièces afin que je puisse rendre ce travail beaucoup plus facile à l'avenir et essayer d'identifier quelle partie du processus donnait à mes emballages ImportErrors, mais c'était un exercice utile pour séparer un peu les morceaux de PyInstaller. et en savoir plus sur les hooks et les importations et les importations au niveau du module / package.

1
Michael McIntyre 15 mars 2019 à 02:17