Pyinstaller, fichier de spécifications, importateur: aucun module nommé 'blah'
-
02-11-2019 - |
Question
J'essaye de créer un script python via Pyinstaller. J'ai utilisé les commandes suivantes pour configurer, générer un fichier de spécifications et construire:
wget pyinstaller.zip, extracted it, python Configure.py, etc, then:
python pyinstaller/Makespec.py --onefile myscript.py
python pyinstaller/Build.py myscript.spec
Voici le fichier de spécifications qu'il a généré:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), 'icinga.py'],
pathex=['/home/user/projects/icinga_python/releases/v2.1'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'myscript'),
debug=False,
strip=False,
upx=True,
console=1 )
Cela a construit un fichier exécutable dans dist/
annuaire. Lorsque vous essayez d'exécuter ce fichier, j'obtiens ce qui suit:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 455, in importHook
raise ImportError, "No module named %s" % fqname
ImportError: No module named mysql
Si j'ai déplacé cet exécutable dans le répertoire du code Python réel, il a donné des résultats différents:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 521, in doimport
exec co in mod.__dict__
File "CLUSTER/mysql/icingasql.py", line 13, in <module>
import urllib2
File "/home/user/projects/myscript/releases/v2.1/pyinstaller/iu.py", line 455, in importHook
raise ImportError, "No module named %s" % fqname
ImportError: No module named urllib2
Dans le ... Docs de pyinstaller je vois ça --onefile
est l'option dont j'ai besoin / veulent, mais pour une raison quelconque, tout n'est pas compilé.
Le script n'inclut vraiment rien de sophistiqué, juste de petits modules rapides que j'ai écrits pour les instructions SQL et l'analyse de certains sites Web.
Pas de solution correcte