PyQt项目打包出错!(包含各种问题,折腾好几天!!!)
主要问题:
之前我打包,一直出现这个问题:
查了很久网页解决了,结果又有一个问题:
打开可执行文件exe,结果黑框一闪而过!(图片来不及截!)
但是没出现具体错误在哪?
解决:
经过网络查询:发现,因为我在打包的时候 输入了命令行pyinstaller -D -w myWidget.py
,问题就出在“-W”!!!所以打开可执行文件的时候(此时在当前目录下cmd 然后输入生成的可执行文件myWidget.exe),没有出现我的错误。
然后,去掉-w后,我再cmd执行这个可执行文件,黑框下出现了错误原因:大概翻译过来就是缺失C:\dev\python\python37\Lib\site-packages\pyecharts....里面的东西
,然后机智如我,我把C:\dev\python\python37\Lib\site-packages\pyecharts这个文件夹直接复制粘贴在dist里面,再点击myWidget.exe后成功了!
整个打包过程中注意的细节
1. pycharm中设置Python Interpreter 相关问题:1. pycharm中设置Python Interpreter 相关问题:
- 创建工程时这样选择,就能使用 当前Python已经安装的所有 第三方包了:
- 经过下面(1)(2)(3)三个步骤后,全部点击OK 即可:
-
我试了一下是可以的,但是 只是个人使用过程中摸索到的,没有见过什么教程之类的讲解指导,慎用...
-
总结:这样做,今天(20190902)发现了一个好处:用了 "C:\Python\Python37\python.exe"的interpreter的项目,在安装 包 的时候,它也是将包安装到了"C:\Python\Python37\Lib\site-packages"中,这样其它项目再使用 "C:\Python\Python37\python.exe"的话,安装的 包 也能被使用到了。
2. 打包过程中将文件夹分级,包括引用了多个外部资源文件,和新创建了一个frozen_dir.py的文件,并把它引用在其它的py文件里,这样的好处是:使各个文件夹里面的路径都封装起来,不使用绝对路径,避免在其它电脑上运行出错(在其它电脑上可以随意放置路径)!
此frozen_dir.py主要的源码是:
import sys
import os
def app_path():
"""Returns the base application path."""
if hasattr(sys, 'frozen'):
# Handles PyInstaller
return os.path.dirname(sys.executable)
return os.path.dirname(__file__)
if __name__=='__main__':
print(app_path())
要引用外部资源文件的地方,那个py文件要import frozen_dir,
资源路径 = app_path() + xxx/xx
比如要引用json里面的json文件:
import frozen_dir
base = frozen_dir.app_path()
json_path = '{}\json\BMAP.json'.format(base)