打包过程
- 在pip中安装pyinstaller:
pip install pyinstaller
- 切换到需要打包的目录中,执行
pyinstaller -F xxx.py
命令,其中xxx.py
文件即为需要打包的文件。其他可选的指令:-w
打桌面程序,去掉cmd窗口-i
设置图标,图标后缀为.ico
如:pyinstaller -F -w -i gen.ico xxx.py
- 打包完成以后,打开
dist/xxx.exe
文件执行即可。
issue
-
打包过程中报错:
pyinstaller UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 139: invalid continuation byte
- 打开报错文件的
...\site-packages\PyInstaller\compat.py
,将out = out.decode(encoding)
改为out = out.decode(encoding, "replace")
- 打开报错文件的
-
打包过程中会出现:
RecursionError: maximum recursion depth exceeded
异常,在执行pyinstaller
命令后,工作目录下会出现一个与待打包的py文件一样文件名的.spec
文件,打卡这个文件,在最开始位置添加如下代码:import sys sys.setrecursionlimit(1000000)
然后继续执行
pyinstaller -F xxx.spec
。 -
打包成功后,运行.exe报错: ModuleNotFoundError: No module named ’numpy.core.__dtype_ctypes’。
- 打开
.spec
文件,将'numpy.core._dtype_ctypes'
写入到hiddenimports中:
然后重新执行hiddenimports=['numpy.core._dtype_ctypes']
pyinstaller
指令。
- 打开
-
pyinstaller可执行文件报错astor,类似
...... File "site-packages/astor/__init__.py",line 24,in <model> FileNotFoundError: [Errno 2] no such file or directory:"/temp/_MEI24122/astor/VERSION
- 定位到报错文件的位置,
...\site-packages\astor\__init__.py
中获取软件版本的三行代码注释掉,这部分代码没有发挥作用。
然后重新执行ROOT = os.path.dirname(__file__) with open(os.path.join(ROOT, 'VERSION')) as version_file: __version__ = version_file.read().strip()
pyinstaller
指令。
- 定位到报错文件的位置,