在学习python时使用到PyInstaller库,在将我自己的代码打包成可执行文件时使用命令行:
pyinstaller -F <文件名.py>
运行后报错:
D:\Python\learn_python>pyinstaller -F CalBMIv3.py
197 INFO: PyInstaller: 5.3
197 INFO: Python: 3.10.2
206 INFO: Platform: Windows-10-10.0.19044-SP0
207 INFO: wrote D:\Python\learn_python\CalBMIv3.spec
210 INFO: UPX is not available.
212 INFO: Extending PYTHONPATH with paths
['D:\\Python\\learn_python']
Traceback (most recent call last):
File "D:\Python\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "D:\Python\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "D:\Python\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
File "D:\Python\lib\site-packages\PyInstaller\__main__.py", line 178, in run
run_build(pyi_config, spec_file, **vars(args))
File "D:\Python\lib\site-packages\PyInstaller\__main__.py", line 59, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "D:\Python\lib\site-packages\PyInstaller\building\build_main.py", line 934, in main
build(specfile, distpath, workpath, clean_build)
File "D:\Python\lib\site-packages\PyInstaller\building\build_main.py", line 856, in build
exec(code, spec_namespace)
File "D:\Python\learn_python\CalBMIv3.spec", line 7, in <module>
a = Analysis(
File "D:\Python\lib\site-packages\PyInstaller\building\build_main.py", line 348, in __init__
self.hookspath += discover_hook_directories()
File "D:\Python\lib\site-packages\PyInstaller\isolated\_parent.py", line 269, in wrapped
return call(function, *args, **kwargs)
File "D:\Python\lib\site-packages\PyInstaller\isolated\_parent.py", line 238, in call
return isolated.call(function, *args, **kwargs)
File "D:\Python\lib\site-packages\PyInstaller\isolated\_parent.py", line 176, in call
raise RuntimeError(f"Child process call to {function.__name__}() failed with:\n" + output)
RuntimeError: Child process call to discover_hook_directories() failed with:
File "D:\Python\lib\site-packages\PyInstaller\isolated\_child.py", line 63, in run_next_command
output = function(*args, **kwargs)
File "D:\Python\lib\site-packages\PyInstaller\building\build_main.py", line 106, in discover_hook_directories
from PyInstaller.log import logger
ModuleNotFoundError: No module named 'PyInstaller.log'; 'PyInstaller' is not a package
最后一行提示没有找到相应的模块,我怀疑是PyInstaller库安装出了问题,于是再次运行安装命令:
D:\Python>pip install pyinstaller
Requirement already satisfied: pyinstaller in d:\python\lib\site-packages (5.3)
Requirement already satisfied: pefile>=2022.5.30 in d:\python\lib\site-packages (from pyinstaller) (2022.5.30)
Requirement already satisfied: altgraph in d:\python\lib\site-packages (from pyinstaller) (0.17.2)
Requirement already satisfied: setuptools in d:\python\lib\site-packages (from pyinstaller) (60.9.3)
Requirement already satisfied: pyinstaller-hooks-contrib>=2021.4 in d:\python\lib\site-packages (from pyinstaller) (2022.9)
Requirement already satisfied: pywin32-ctypes>=0.2.0 in d:\python\lib\site-packages (from pyinstaller) (0.2.0)
Requirement already satisfied: future in d:\python\lib\site-packages (from pefile>=2022.5.30->pyinstaller) (0.18.2)
很明显已经正确安装在d:\python\lib\site-packages路径下,
而我在打包时的路径在D:\Python\learn_python下,但是这个路径不包含pyinstaller的安装路径,这可能就是报错的原因,于是我在D:\Python路径下再次进行打包,结果
提示找不到我的daydayup1,py文件,而它明明就在其下的learn_python文件夹中,于是我将learn_python中的文件转移到python文件夹下,再次运行
成功了!
打开python文件夹,生成了dist,build文件夹和.spac文件,其中我们想要的可执行文件就在dist文件夹里.build文件是可以删除的.
总结:
要将需要打包的源码文件放在和pyinstaller库(默认安装在python\lib\site-packages路径下,可以再次执行安装命令查看)相同的目录下,再执行第一条命令即可