《PyInstaller打包实战指南》https://blog.csdn.net/La_vie_est_belle/article/details/96321995
在这里将各种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'
在Pyinstaller官网上的第一段有这么一句话(https://www.pyinstaller.org/):
Pyinstaller兼容Python2.7以及3.3-3.6。我看很多刚入门学习Python的小伙伴都是用Pyinstaller打包Python3.7程序而出错的,所以只需要将Python版本换一下就可以了。
当然不代表以后不兼容3.7,可以随时关注下官网动态(更新:目前已经支持)。
64位系统上打包的只能运行于64位系统,不过32位系统上打包的的可以运行于32位和64位系统。
所以exe放到其他电脑上若无法运行的话可以看一下两台电脑的位数是不是相同(不过跟windows版本是没有什么关系的,win7上打包的也可以在win10上运行)。
若你写的程序涉及到chromedriver.exe,请注意Pyinstaller是不会把chromedriver.exe也一起打包进去的。
所以当你把程序放到另外一台电脑上时,如果那台电脑没有chromedriver.exe,那很可能会报类似如下错误:
报错提示就是要将chromedriver.exe放在路径中。
解决办法就是拷贝一份chromedriver.exe到另外一台电脑上,放在和你打包起来的exe相同的路径下就可以了。
请移步https://blog.csdn.net/La_vie_est_belle/article/details/81252588
请移步https://blog.csdn.net/La_vie_est_belle/article/details/79017358
这个程序里可能用到了一些你还没有安装的库,而别人电脑上的Python环境里已经安装了相应的库。
所以你只需要用pip下载相应的库就可以了(一般报错会提示Module Not Found: xxx之类的)。
程序中用到的文件,在打包后要跟随exe,不然程序找不到相关文件,自然就无法运行,除非使用--add-data命令。或者说你用到PyQt5库的话,可以将资源文件添加到qrc中,然后转换为py文件。
请看下方代码注释
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
请移步:https://blog.csdn.net/La_vie_est_belle/article/details/82346355
目前暂时想到这么多,以后有想到其他的会再补充。可以在下方评论区留言你所遇到的问题,谢谢。
额新建了一个Python交流群,大家感兴趣的话可以加入一起学习:820934083