web-dev-qa-db-fra.com

Une erreur lors de la génération d'un fichier exe à l'aide de pyinstaller - typeerror: objet str, bytes ou os.PathLike attendu, pas NoneType

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?

10
김남호

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

17
Victor Stanescu

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 venvpath 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. enter image description here

Pour les utilisateurs Linux , suivez mon autre réponse ici .

2
debugging XD

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 .)

1

Le bogue a été résolu dans la version 3.6 de PyInstaller. Il suffit de mettre à jour et cela fonctionnera bien.

0
hdias2310