[英]An error for generating an exe file using pyinstaller - typeerror: expected str, bytes or os.PathLike object, not NoneType
I am trying to build an .exe
file from .py
file using pysinstaller
and Python 3.7.2.我正在尝试使用
pysinstaller
和 Python 3.7.2 从.py
文件构建一个.exe
文件。
It worked with Python 3.6;它适用于 Python 3.6; then I re-installed the last version of Python (3.7.2) and tried to generate an exe file, but pyinstaller barfs.
然后我重新安装了最新版本的 Python (3.7.2) 并尝试生成一个 exe 文件,但 pyinstaller barfs.
Below is the error report I get.下面是我得到的错误报告。
(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
What could be the problem?可能是什么问题呢?
我发现了以下解决办法:更换bindepend.py
从<myProject_path>\\venv\\Lib\\site-packages\\PyInstaller\\depend
与Loran425在GitHub上提供的文件在这里
As I have read from many forums here and here and discussions regarding this issue caused by Pyinstaller.正如我从这里和这里的许多论坛以及关于 Pyinstaller 引起的这个问题的讨论中读到的。 If you are using Pycharm or any virtual environment.
如果您使用的是 Pycharm 或任何虚拟环境。 Unfortunatelly Pycharm creates its local vertual environment in
venv
path once you indicate the interpreter
.不幸的是,一旦您指定了
interpreter
, venv
就会在venv
路径中创建其本地虚拟环境。 So, you should set the external tool (pyinstaller) to the real path of your python 3.7 .exe as the picture shows here.因此,您应该将外部工具(pyinstaller)设置为您的python 3.7 .exe 的真实路径,如图所示。
For Linux users, follow my other answer here .对于Linux用户,请在此处按照我的其他答案进行操作。
In my case the problem occurs when I'm using the standard library's venv
, but not when I'm using virtualenv
.在我的情况下,当我使用标准库的
venv
时会出现问题,但当我使用virtualenv
时不会出现问题。 (However I had to use virtualenv==16.1.0
because of another bug .) (但是,由于另一个错误,我不得不使用
virtualenv==16.1.0
。)
The bug was resolved in version 3.6 of PyInstaller.该错误已在 PyInstaller 3.6 版中解决。 Just update and will work fine.
只需更新即可正常工作。
It may be from an ill-formed spec file, something as simple (yet difficult to find) as a commented or missing argument.它可能来自格式不正确的规范文件,就像注释或丢失的参数一样简单(但很难找到)。
When I comment out name
in exe
,当我在
exe
注释掉name
时,
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
# name='my_app',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
icon='resources/icons/icon.ico',
version='resources/version/version.py')
I get the following traceback:我得到以下回溯:
146666 INFO: Building PYZ (ZlibArchive) c:\projects\my-env\app\qc\tools\my_app\build\my_app_old\PYZ-00.pyz completed successfully.
Traceback (most recent call last):
File "C:\Users\lorem\Anaconda3\envs\my-env\Scripts\pyinstaller-script.py", line 10, in <module>
sys.exit(run())
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\site-packages\PyInstaller\__main__.py", line 114, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\site-packages\PyInstaller\__main__.py", line 65, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\site-packages\PyInstaller\building\build_main.py", line 720, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\site-packages\PyInstaller\building\build_main.py", line 667, in build
exec(code, spec_namespace)
File "my_app_old.spec", line 49, in <module>
version='resources/version/version.py')
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\site-packages\PyInstaller\building\api.py", line 382, in __init__
self.name = os.path.join(CONF['distpath'], os.path.basename(self.name))
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\ntpath.py", line 214, in basename
return split(p)[1]
File "C:\Users\lorem\Anaconda3\envs\my-env\lib\ntpath.py", line 183, in split
p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType
The application builds when name
is included.应用程序在包含
name
时构建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.