我的pyinstaller是直接用pip安装的:
pip install pyinstaller
如果想和我安装相同的版本可以这样:
pip install pyinstaller==3.3.1
使用时就直接一句话就可以把.py的程序打包成一个执行文件
pyinstaller -F xxx.py
这里附上官网pyinstaller
python打包不止这一种方式,还有别的,但感觉pyinstaller是最好的了。
打包方法对比:Linux+树莓派3开发总结——cx_Freeze打包Python3程序(工程文件)
这个问题比较好解决!就是打包时可能报错UTF-8。
首先你要保证你程序可以运行。比如你程序中有中文,那你文件格式就应该是UTF-8。用记事本打开xx.py-->另存为-->更改格式为UTF-8
其次是CMD命令行窗口问题。输入chcp 65001,再打包就可以解决了。
[2018-10-22]最近发现一个新问题,我在打包完成运行exe后出现错误:
Fatal Python error: Py_Initialize: unable to load the file system codec
LookupError: unknown encoding: utf-8
Current thread 0x00001f44 (most recent call first):
思考我的打包环境,我最近去除了python环境变量,于是我将它添加回来,果然就好了!
添加方法:小笔记 给鼠标右键添加jupyter
这可能是犹豫打包时调用的资源不对,然后添加环境变量后指定了python等路径,就行了????反正就是解决了!
程序太多了,超过深度限制了!
解决方法:在spec文件首行加入两行代码解决
import sys
sys.setrecursionlimit(5000)
然后打包时不要打.py文件了,要打.spec。这样执行命令
pyinstaller -F xxx.spec
有关打包命令可以参考 PyInstaller用法
解决完错误1,打包生成exe后,运行exe程序发现报错误2的error。
如果在自己电脑上测试,可能环境没有打进exe,却可以自动通过环境变量调用本机的环境,所以这样你不知道单个exe是不是真的能运行。
错误2,参考了将Python写的tensorflow代码文件打包为exe趟坑记录,恩!应该是tensorflow版本问题了
我之前用的tensorflow1.7,卸载!更换了tensorflow1.4。顺便说一下卸载安装命令
#卸载
pip uninstaller tensorflow
#指定版本安装
pip installer tensorflow==1.4
OK!!!! NICE!!! 打包之后竟然没有报错了。
这个就不比较蛋疼了,因为我遇到这个问题时,不管是打包过程还是运行exe过程,都没有任何报错。这让我也郁闷,打包成功了,还不能运行???
我没用编译器写程序,也没法调试。然后我在程序响应语句后加上print(),看是运行到哪里就中断执行了。最后我定位到cv2.VideoCapture(path_vedio)。我用opencv打开一个avi的视频。于是我想到之前写程序时貌似遇到过类似的问题,要安装ffmpeg。
于是我参考了pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll
在程序首行添加了下面语句
import ctypes
try:
temp=ctypes.windll.LoadLibrary( 'opencv_ffmpeg341_64.dll' )
except:
pass
opencv_ffmpeg341_64.dll是我从 用VS配置opencv时的opencv库里找的。拷贝到打包的spec同目录下。
打包!OK!解决!
最后吐槽一下,python打包真麻烦,exe又很大,运行起来又很慢!关键是,你写程序直接用个import就导入包了。你也不知道程序又调用了哪些dll,结果打包时pyinstaller找不到,就不成功。其实我打包过程的log日志中依然有很多
43955 WARNING: lib not found: pgf90.dll dependency of f:\software\anaconda\Library\bin\mkl_pgi_thread.dll
这样的话。但是我生成的exe拿到别人电脑里能运行就没解决。
用pyinstaller遇到很多错误,可能也不止这点了。如果有人有相关问题可以问我,如果着急,可以通过扫描勾引我的注意!嘿嘿嘿!