J'essaie de construire un .exe
fichier de .py
fichier utilisant pysinstaller
et Python 3.7.2.
Cela a fonctionné avec Python 3.6; puis j'ai réinstallé la dernière version de Python (3.7.2) et j'ai essayé de générer un fichier exe, mais barinstaller pyfs .
Voici le rapport d'erreur que j'obtiens.
(venv) C:\Users\user\Desktop\untitled1>pyinstaller test.py
53 INFO: PyInstaller: 3.4
53 INFO: Python: 3.7.2
54 INFO: Platform: Windows-10-10.0.17134-SP0
58 INFO: wrote C:\Users\user\Desktop\untitled1\test.spec
60 INFO: UPX is not available.
61 INFO: Extending PYTHONPATH with paths
['C:\\Users\\user\\Desktop\\untitled1', 'C:\\Users\\user\\Desktop\\untitled1']
61 INFO: checking Analysis
187 INFO: checking PYZ
236 INFO: checking PKG
237 INFO: Building PKG because PKG-00.toc is non existent
238 INFO: Building PKG (CArchive) PKG-00.pkg
Traceback (most recent call last):
File "C:\Users\user\Desktop\untitled1\venv\Scripts\pyinstaller-script.py", line 11, in <module>
load_entry_point('PyInstaller==3.4', 'console_scripts', 'pyinstaller')()
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\__main__.py", line 111, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\__main__.py", line 63, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Users\user\Desktop\untitled1\venv\lib\site- packages\PyInstaller\building\build_main.py", line 838, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:\Users\user\Desktop\untitled1\venv\lib\site- packages\PyInstaller\building\build_main.py", line 784, in build
exec(text, spec_namespace)
File "<string>", line 29, in <module>
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 424, in __init__
strip_binaries=self.strip, upx_binaries=self.upx,
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 196, in __init__
self.__postinit__()
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\datastruct.py", line 158, in __postinit__
self.assemble()
File "C:\Users\user\Desktop\untitled1\venv\lib\site-packages\PyInstaller\building\api.py", line 273, in assemble
pylib_name = os.path.basename(bindepend.get_python_library_path())
File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\ntpath.py", line 214, in basename
return split(p)[1]
File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\ntpath.py", line 183, in split
p = os.fspath(p) TypeError: expected str, bytes or os.PathLike object, not NoneType
Quel pourrait être le problème?
J'ai trouvé la solution suivante: remplacer bindepend.py
de <myProject_path>\venv\Lib\site-packages\PyInstaller\depend
avec le fichier fourni par Loran425 sur github ici
Comme je l'ai lu sur de nombreux forums ici et ici et des discussions concernant ce problème causé par Pyinstaller. Si vous utilisez Pycharm ou tout autre environnement virtuel. Malheureusement Pycharm crée son environnement vertical local dans venv
path une fois que vous indiquez interpreter
. Donc, vous devez définir l'outil externe (pyinstaller) sur le vrai chemin de votre python 3.7 .exe comme le montre l'image ici.
Pour les utilisateurs Linux , suivez mon autre réponse ici .
Dans mon cas, le problème se produit lorsque j'utilise venv
de la bibliothèque standard, mais pas lorsque j'utilise virtualenv
. (Cependant, j'ai dû utiliser virtualenv==16.1.0
à cause de n autre bogue .)
Le bogue a été résolu dans la version 3.6 de PyInstaller. Il suffit de mettre à jour et cela fonctionnera bien.