PyInstaller说明
PyInstaller的下载的话直接可以看官网的说明:http://www.pyinstaller.org/
//win + r 打开运行 输入 cmd 输入以下代码
pip install pyinstaller
//安装完成之后切换到你的目标文件的目录下,运行如下代码生成执行文件
pyinstaller yourprogram.py
然后就可以生成可执行文件。生成的可执行文件在dist这个文件夹里面
pyinstaller还有一些参数可供选择(具体使用之后慢慢更新)
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面是非常有用。不过如果是命令行程序的话那就删除这个选项!
-p 表示你自己定义需要加载的类路劲,一般情况下用不到
-i 表示可执行文件的图标
正常打包输出:
pyinstaller -F xxxx.py
设置图标输出:
pyinstaller -i xxx.ico -F xxxx.py
增加程序版本信息:
准备好版本信息文件:file_version_info.txt
版本信息文件可以通过pyinstaller自带工具(pyi-grab_version)获取:
命令:pyi-grab_version.exe xxxx.exe file_version_info.txt
其中xxxx.exe是有软件版本信息的执行文件。
这样可以通过编辑file_version_info.txt,获得自己的版本信息文件打包时用参数--version-file :
pyinstaller --version-file=file_version_info.txt test.py加版本信息,加ico,单文件的打包命令
pyinstaller --version-file=file_version_info.txt -i setup.ico -F main.py
错误
-
RecursionError: maximum recursion depth exceeded
这个递归错误,大概率是自己调用自己太多次导致的。解决办法:
pyinstaller 之后会生成一个和xxx.py文件同名的 xxx.spec 文件
打开xxx.spec文件,在行首导入sys包,然后设置一下递归调用的限制次数,可以大一点。import sys sys.setrecursionlimit(100000) block_cipher = None
修改之后,然后 pyinstall -F xxx.spec就行了
AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error'
这个错误是因为图标文件没有使用.ico文件造成的-
No such file or directory: ‘C:\Users\user\AppData\Local\Temp_MEI106802\abcd\yyyy
新建hook-abcd.py文件
在py文件中输入:from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files("abcd")
保存后将此py文件放入Pyinstaller下的hook的文件夹中,重新打包问题解决。
-
打包成功,但运行时出现加载文件错误
打印文件路径显示:C:\Users\user\AppData\Local\Temp_MEI213162\xxxxxx解决办法:
if getattr(sys, 'frozen', False): absPath = os.path.dirname(os.path.abspath(sys.executable)) elif __file__: absPath = os.path.dirname(os.path.abspath(__file__))
这样根据运行方式,定义相对路径,问题解决。