Python程序打包

一、为什么要对Python程序打包?

当手头Python脚本的运行环境要求不同,时间又紧急,

处理数据时又要临时搭建环境,很是麻烦

如果将Python脚本打包成可执行文件后会方便许多

也不用考虑运行环境的差异,随时随地运行

二、将Python程序打包的方法

我使用的是Python3.6 32位,windows8x64系统

这里直接推荐使用PyInstaller进行打包,至于为什么不用py2exe后面会说

1.安装PyInstaller

首先你要有pip安装工具,一般2.7.9以上或者3.4以上版本都内置了pip工具。假如你没有,那么你可以参照https://www.cnblogs.com/limit1/p/8350344.html(windows系统)

http://www.runoob.com/w3cnote/python-pip-install-usage.html(Linux系统)

安装好pip,打开cmd,输入:

pip install pyinstaller

等待下载和安装完成即可。

2.对Python程序进行打包

先要在命令行进入到打包目标目录,并输入:

pyinstaller -F test_demo.py

这里-F是指生成.exe文件,详细内容https://blog.csdn.net/leida_wt/article/details/78698674

这里假如你使用的是Python3.6,那么恭喜,你会遇到这个错误

 

这是因为PyInstaller目前还不支持Python3.6 ,那么我们应该怎么办呢?

我们需要到GitHub上下载改进版,地址https://github.com/pyinstaller/pyinstaller

下载解压后将文件夹PyInstaller(没有的话将pyinstaller-develop文件夹更名为PyInstaller)

复制到

C:\Users\XXX\AppData\Local\Programs\Python\Python36\Lib\site-packages(注意每个人路径略有不同)
这次再运行就会发现不再报错了

这时候你会发现打包目录里多了两个文件夹build和dist,那个dist文件夹里就是你想要的.exe文件了

点击运行就可以啦~~

另外要提一下,对于用到了多线程的Python程序需要单独注意,PyInstaller有很多线程的问题,打包后双击exe程序运行时,程序会不停的启动进程,但是并没有真正执行进程(详见https://blog.csdn.net/t1014336028/article/details/83018987)

按照网上提到的办法,在  if __name__ == '__main__': 下面加一行代码:multiprocessing.freeze_support(),再打包运行.exe文件,就可以跑起来了。

想了解更多有关PyInstaller的内容可以看这位大佬的博客http://ju.outofmemory.cn/entry/137370,还有针对PyInstaller打包的其他问题的解决办法,非常全面,极力推荐

三、为什么不用py2exe

假如你使用的是py2exe,并已安装完成,而且运行环境是Python3.6。

那么你仍会遇到这个错误 IndexError: tuple index out of range

官方文档表示对Python3.6完全不支持

The bytecode often changes in small ways from version to version that could break even Python 3.5
(given only 3.3 and 3.4 support is claimed explicitly),
but 3.6 is 100% guaranteed to fail.
100%失败。。。2333而且暂时没有解决,所以还是选择了PyInstaller
 
 
[PS:既然PyInstaller已经有了改进版,为什么不直接更新到官网呢,莫非3.6特性专属2333]
 
posted @ 2019-02-15 16:32  Seikito  阅读(7822)  评论(0编辑  收藏  举报