1 安装指定Python版本的PyInstaller前言:如果PyInstaller 的打包版本与开发环境的版本不一致,比如打包版本比开发环境的低,就会出现不能import某个模块的问题。例如:importError: cannot import name ‘Final’ from ‘typing’。这个时候需要使用某个特别的Python版本去打包。
这里要确定Python版本。
# 通常的PyInstaller安装方式 pip install pyinstaller # 安装Python2.x的PyInstaller py -2 -m pip install pyinstaller # 安装Python3.9的PyInstaller py -3.9-64 -m pip install pyinstaller
版本确认命令:
pyinstall help # 输出例子1。这里可以看到使用的Python版本 help这里可以是任意的词汇 D:>pyinstaller help 1087 INFO: PyInstaller: 4.5.1 1088 INFO: Python: 3.7.0 (conda) 1092 INFO: Platform: Windows-10-10.0.19041-SP0 1093 INFO: wrote D:help.spec 1102 INFO: UPX is not available. script 'D:help' not found # 输出例子2 help可以是其它 D:>C:UsersmarkAppDataLocalProgramsPythonPython39scriptspyinstaller.exe help 75 INFO: PyInstaller: 4.5.1 75 INFO: Python: 3.9.5 96 INFO: Platform: Windows-10-10.0.19042-SP0 1093 INFO: wrote D:help.spec 1102 INFO: UPX is not available. script 'D:help' not found2. 使用指定Python版本下的PyInstaller路径进行打包
# 格式 PyInstaller your_script.py # Windows例子 C:UsersmarkAppDataLocalProgramsPythonPython39scriptspyinstaller.exe -F -w --disable-windowed-traceback -i app.ico -p C:UsersmarkAnaconda3Libsite-packages;C:UsersmarkAnaconda3envsguiappLibsite-packages main.py
选项解释:
-F, --onefile:打包成一个文件
-w, --windowed, --noconsole: 无控制台
–disable-windowed-traceback :无控制台输出
在本人的例子中,由于开始使用默认的Python3.7版本来打包程序,由于低于开发 环境的版本3.9,就出现了“importError: cannot import name ‘Final’ from ‘typing’”的运行时错误。需要安装Python3.9的PyInstaller,并用新安装的PyInstaller 才能正确打包。
参考:How to change python version for use with pyinstaller



