python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!

本文python是3.5  pyqt5  win7(和win10比差别不大) pycharm社区版

我的python程序不仅加载了qt的模块还引入ctypes模块,加载了windows的动态库.dll 文件。

关于python的安装和pyqt5的安装不在这里说明了,其他的博客写的已经很多了。这里可以参照下面的博客:

https://www.cnblogs.com/dalanjing/p/6978373.html

1先说利用pyinstaller的坑

首先我运行程序没问题,然后在主程序.py文件下执行 :

F:\code\python\2>pyinstaller -F -w --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\bin --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\plugins  RUN.py

其中第一个paths=*****所加的是pyqt5模块的路径,每个人不一样。第二个是本程序中加载的window .dll的库。

结果报错:

3983 INFO: Analyzing F:\code\python\simulate_camera01\RUN.py

Syntax error in F:\code\python\simulate_camera01\RUN.py
  File "c:\python3.5\lib\tokenize.py", line 397, in find_cookie
     raise SyntaxError(msg)
   File "", line None
 SyntaxError: invalid or missing encoding declaration

很奇怪哎,各种百度但是没有找到和我这么相对的,但是基本都是编码相关的,关键也没有说哪个文件的问题。只是说语法错误:无效或者丢失编码申明。另外,pyinstaller仅仅支持文件为utf-8的编码,所以题主利用pycharm设置整个工程都是utf-8格式:

python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!_第1张图片

结果还是会报错~~~!!!!!!!!!!!!!!!!!!!!

所以题主就在这里放弃用这个工具打包了。转战cx_Freeze

2再说cx_Freeze安装的坑:

开始的时候我的python版本是3.7.1的但是怎么也安装不上,说是没有合适的。后来题主无奈之下换了python,换成python3.5

这次是可以安装的,但是!!我参照下面博客做了,却没有安装成功,:

https://blog.csdn.net/Geoffrey_Zflyee/article/details/78784601

利用cmd到python的scripts目录里面执行:cxfreeze -h

提示:不是内部或外部的命令,也不是可运行的程序

各种百度,说是因为scripts目录下执行相关指令该指令整个目录路径不能有空格!而题主的python是安装在C:\Program Files (x86)下的,中间有空格,无奈之下卸载python重新安装,直接安装在C盘根目录。再在相关scritps目录cmd运行:cxfreeze -h 还真的可以了:如下图:

python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!_第2张图片

然后再在python主程序根目录下运行:

F:\code\python\2>cxfreeze RUN.py

提示错误:这次提示的错误还是编码错误,但是会指出文件:

python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!_第3张图片

我那个文件没有申明编码。可是我之前pycharm明明都设置为utf-8了。无奈之下,我单独利用记事本打开刚才那个文件,最后发现是ANSI编码,重新保存utf-8。

这时候我突然想到,刚才pyinstaller会不会由于这个文件呢?

3再说pyinstaller打包完的坑

于是我又在刚才根目录运行:

F:\code\python\simulate_camera01>pyinstaller -F -w --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\bin --paths=C:\python3.5\Lib\site-packages\PyQt5\Qt\plugins  RUN.py

结果显示:

python利用pyqt5所写的gui利用pyinstaller和cxfreeze打包exe遇到的坑!_第4张图片

居然成功了!!!!!!!!!!!!!!!!!

然后我运行程序,注意~~这里运行直接在dist里面点击exe文件是不对的,会出现可能出现的错误,界面虽然能打开,比如直接死掉。在运行程序之前一定要把相关的程序所需要的资源放在同一个根目录~~~~

但是,题主这个程序无法实现网络传输,具体原因不清楚,是可以跑起来的~~中间不知道哪里有bug,暂时没照出来~

所以无奈之下,用cxfreez试试吧~~切换到程序目录:

F:\code\python\2>cxfreeze RUN.py --target-dir F:\code\python\2\dist1\

输出在dist1里面,

然后把所有相关资源文件放在一起,包括程序所需要的dll文件夹。

果然可以运行!!!!!目前测试没发现bug~

感觉是工具的问题,cx_freeze更加稳定一些!!

你可能感兴趣的:(python)