pyinstaller打包后运行错误 解决方法
pyinstaller打包后运行错误 解决方法
python程序调试好后,怎么给别人用呢,不能每台电脑都要安装python环境,然后安装一系列库吧,打包成exe文件最简单跨平台支持好的应该是pyinstaller了,但是拿他打包总会出现这样那样的问题。
1.安装
我尝试了 pip install pyinstaller 发现找不到
原来要 pip install pyinstall 就可以了
当然 如果还是装不上 试试 python -m pip install pyinstall
应该就可以了
2. 打包第三方库
建议在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退。pyinstaller -p参数是添加的pyinstaller打包程序时的扫描路径,假设venv\Lib\site-packages是包存放路径,那么也可以使用以下命令打包:
pyinstaller -p venv\Lib\site-packages -F xxx.py
3.failed to execute script 错误
首先使用
pyinstaller -F -w code.py
进行exe打包,得到的单个.exe文件,运行后提示failed to execute script 错误
排错过程:使用pyinstaller -D code.py进行exe打包,得到一个目录文件,通过命令行执行.exe文件提示The ‘six’ package is required; normally this is bundled with this package错误
说明pyinstaller打包后,需要six等库,最终确认需要在code.py中添加以下库:
import six import packaging import packaging.version import packaging.specifiers import packaging.requirements
当然,six和packaging库建议使用pip安装。
加入以上库后,使用pyinstaller -D code.py打包执行不再出错。
4.找不到数据文件夹
有些程序包含了数据文件夹,不能直接按资源文件方式打包,需要在执行文件所在的文件夹内创建这些数据文件。一般情况下在脚本中我们可以使用os.path.split(os.path.abspath( file))来的到code.py的路径,然后拼接得到数据文件夹。但之后使用pyinstaller -F code.py打包成单个exe文件,在未读取数据文件夹的情况下运行正常,一旦打开数据文件,就会闪退,命令行窗口会显示打不开数据文件。因为PyInstaller会创建临时文件夹temp,程序代码在这个临时文件夹中运行,我们可以用以下几个语句来查看正式运行路径:
import sys import os print(sys.path[0]) print(sys.argv[0]) print(os.path.dirname(os.path.realpath(sys.executable))) print(os.path.dirname(os.path.realpath(sys.argv[0])))
得到的结果是
os.path.dirname(os.path.realpath(sys.executable))和os.path.dirname(os.path.realpath(sys.argv[0]))
才是含数据文件夹的路径。因此可以按如下方式取得文件路径,然后根据需要拼接得到数据文件夹的真实路径:
if hasattr(sys, '_MEIPASS'): appPath = os.path.dirname(os.path.realpath(sys.executable)) else: appPath, filename = os.path.split(os.path.abspath( __file__))
appPath 才是我们需要的真实路径,由他来替换我们常用的
os.path.dirname(file)
这样就不会出现找不到文件的错误了
最后随便用哪种方式打包,都运行成功:
pyinstaller -D code.py pyinstaller -F code.py # 生成单个exe 但有黑色窗口 pyinstaller -w -F code.py # 生成单个exe 没有黑色窗口
参数解释:
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标
- 点赞
- 收藏
- 分享
- 文章举报
- 使用pyinstaller打包成exe之后运行闪退,调试后报出 Unable to acquire Oracle environment handle错误解决方法
- pyinstaller 打包py脚本(使用word cloud 和jieba分词遇到的问题)成exe 并且设置计划任务在windowsserver云服务器自动运行的问题和解决方法
- 使用pyinstaller打包,subprocess报“句柄无效”错误的解决方法
- pyinstaller打包单个exe后无法执行错误的解决方法
- pyinstaller 打包程序 出现错误的解决方法
- 【转载】pyinstaller打包python文件后,运行出现"Failed to execute script xxx.exe"错误的解决方式(No module named 'xxx')
- pyinstaller打包PyQt5程序报错找不到PyQt5.sip的解决方法
- nutch安装配置运行时,一些常见的错误与解决方法
- 转 VS2005程序运行时出现MSVCP80D.dll not found错误解决方法(VS 2005的一个“Bug”)
- Oracle运行错误及解决方法集锦
- 运行游戏时出现0xc000007b错误的解决方法
- matlab运行出现错误For floats all values in I must be smaller than 1.解决方法
- Linux 运行 apt-get install 就出现jdk installer 错误的解决方法
- IE8 未知的运行时错误(ueditor编辑器在ie8、ie7下出现JS错误的解决方法)
- mac 上运行cassandra出现的java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: : : unknown error错误解决方法
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- win7(32 bit) + IE8 环境,IE8无法弹窗(错误提示:“此网页上的错误可能会使它无法正确运行”),有关的系统注册信息损坏——解决方法
- vs2010打包系统必备选择.net framework 3.5sp1编译错误的解决方法
- 在Win7(64位)系统下运行World Wind源码程序出现“未处理BadImageFormatException”错误解决方法(另:附加信息)
- C程序访问hadoop出现的各种编译错误和运行时各种类DefFound异常的解决方法