欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pyinstaller打包问题之解决方案汇总

程序员文章站 2024-02-03 22:14:10
...

在这里将各种Pyinstaller打包问题的解决方案汇总起来,方便各个小伙伴们解决问题。

目录:

         1.Pyinstaller与Python版本不兼容

2.64位电脑上打包的是无法运行于32位上的

3.对方电脑没有chromedriver.exe导致程序无法启动

4.Pyinstaller打包selenium去除chromedriver带来的黑框

5.用Pyinstaller打包Scrapy

6.相同的程序自己打包不行,给别人打包就可以

7.你程序中用到的一些文件(图片,txt)要跟随exe

8.打包用到multiprocessing库的程序

9.打包PyQt5出现No module named 'PyQt5.sip'


1.Pyinstaller与Python版本不兼容

在Pyinstaller官网上的第一段有这么一句话(https://www.pyinstaller.org/):

Pyinstaller打包问题之解决方案汇总

Pyinstaller兼容Python2.7以及3.3-3.6。我看很多刚入门学习Python的小伙伴都是用Pyinstaller打包Python3.7程序而出错的,所以只需要将Python版本换一下就可以了。

当然不代表以后不兼容3.7,可以随时关注下官网动态。

 

2. 64位电脑上打包的是无法运行于32位上的

64位系统上打包的只能运行于64位系统,不过32位系统上打包的的可以运行于32位和64位系统。

所以exe放到其他电脑上若无法运行的话可以看一下两台电脑的位数是不是相同(不过跟windows版本是没有什么关系的,win7上打包的也可以在win10上运行)。

 

3.对方电脑没有chromedriver.exe导致程序无法启动

若你写的程序涉及到chromedriver.exe,请注意Pyinstaller是不会把chromedriver.exe也一起打包进去的。

所以当你把程序放到另外一台电脑上时,如果那台电脑没有chromedriver.exe,那很可能会报类似如下错误:

Pyinstaller打包问题之解决方案汇总

报错提示就是要将chromedriver.exe放在路径中。

解决办法就是拷贝一份chromedriver.exe到另外一台电脑上,放在和你打包起来的exe相同的路径下就可以了。

 

4.Pyinstaller打包selenium去除chromedriver带来的黑框

请移步https://blog.csdn.net/La_vie_est_belle/article/details/81252588

 

5.用Pyinstaller打包Scrapy

请移步https://blog.csdn.net/La_vie_est_belle/article/details/79017358

 

6.相同的程序自己打包不行,给别人打包就可以

这个程序里可能用到了一些你还没有安装的库,而别人电脑上的Python环境里已经安装了相应的库。

所以你只需要用pip下载相应的库就可以了(一般报错会提示Module Not Found: xxx之类的)。

 

7.你程序中用到的一些文件(图片,txt)要跟随exe

程序中用到的文件,在打包后要跟随exe,不然程序找不到相关文件,自然就无法运行。

 

8.打包用到multiprocessing库的程序

请看下方代码注释

import multiprocessing

class SendeventProcess(multiprocessing.Process):
    def __init__(self, resultQueue):
        self.resultQueue = resultQueue
        multiprocessing.Process.__init__(self)
        self.start()

    def run(self):
        print 'SendeventProcess'
        self.resultQueue.put((1, 2))
        print 'SendeventProcess'


if __name__ == '__main__':
    # 当在Windows上打包时,multiprocessing.freeze_support()这行非常必要
    # 在Linux和Mac上打包用不着
    multiprocessing.freeze_support() #只要在你的程序的入口中加上这行代码加上就可以了
    print 'main'
    resultQueue = multiprocessing.Queue()
    SendeventProcess(resultQueue)
    print 'main'

详情参考:https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing

 

9.打包PyQt5出现No module named 'PyQt5.sip'

请移步:https://blog.csdn.net/La_vie_est_belle/article/details/82346355

 

目前暂时想到这么多,以后有想到其他的会再补充。可以在下方评论区留言你所遇到的问题,谢谢。

额新建了一个Python交流群,大家感兴趣的话可以加入一起学习:820934083

Pyinstaller打包问题之解决方案汇总