我的python是使用anaconda集成包的,虽然很方便,但是之前写的很多程序,因为pandas、openpyxl等库通过pyinstaller打包会出现很多奇葩问题,而且即使打包出来也会很大(有pandas的情况下大概200+M)。
之前群里小伙伴有提示,通过虚拟环境可以解决这个问题,所以花了半天时间测试了各种情况,最终终于解决了这个问题。
我今天总共测试了3种方法,参考了大量的博客,可能在别人的情况下成功过,但是在我这里只有第三种方法是真正成功的。

方法一:Anaconda创建虚拟环境并打包(失败)
参考贴:
失败分析:虽然用anaconda创建了虚拟环境,但因为里面的python核其实调用的还是anaconda的,所以可能会继承anaconda的一些“坏脾气”,导致打包失败。
另外在这个方法中的虚拟环境创建,先pip install virtualenv,但是不同的版本可能会产生一些bug,比如我在打包后,运行程序一直会出现“no module named “distutils””的错误提示,网上搜了下应该就是virtualenv的版本问题造成的。

方法二:下载纯净版本Python并创建虚拟环境打包(失败)
参考贴:
https://stackoverflow.com/questions/48629486/how-can-i-create-the-minimum-size-executable-with-pyinstaller?noredirect=1
失败分析:其实方法二应该是可以成功的,我后来想了下,有可能是因为系统设置里的环境变量没有修改导致的。
而且这边需要注意的一点是,打包后虽然仍然很大,但是已经可以正常运行了,说明virtualenv版本问题的确存在。

方法三:直接用纯净版本Python并打包(成功)

参考贴:

经历了上述两个失败,再看了上面的帖子,我开始转变思路:既然anaconda屡试屡败,那不如我绕开?

系统里已经装好了anaconda(3.7.3)和纯净python(3.7.2)两个版本(版本不一样,是我故意而为之,主要为了区分),既然程序的运行需要使用到环境变量,那我把anaconda的环境变量删除不就行了?

系统属性——高级——环境变量进入设置窗口

anacconda里面没有Python anaconda没有pandas库_anacconda里面没有Python


上面的用户变量,以及下面的系统变量中的Path,把anaconda相关的几个全部删除,只保留纯净Python的环境变量

我的anaconda环境变量如下(强烈建议备份!):

anacconda里面没有Python anaconda没有pandas库_环境变量_02


我的纯净Python环境变量如下:

anacconda里面没有Python anaconda没有pandas库_环境变量_03


修改好环境变量后,做的事情就和前面2步的一样了:

1、pip install 几个库
以我上一个帖子《Pandas:写了一个简易的销量异常检测器》为例

需要用到的第三方库主要就是pandas和numpy,
而pandas需要额外有xlrd和openpyxl,
另外打包需要pyinstaller
所以pip的库如下:

pip install pyinstaller
 pip install pandas (会自动安装numpy)
 pip install xlrd (为了pandas打开xls文件)
 pip install openpyxl (为了pandas打开xlsx文件)

2、pyinstaller -F C:\Users\Administrator\Desktop\报表\日报\判断数据是否异常.py
然后在C:\Users\Administrator\dist下找到打包好的文件,运行正常

anacconda里面没有Python anaconda没有pandas库_环境变量_04


anacconda里面没有Python anaconda没有pandas库_虚拟环境_05


3、如果是对anaconda有重大依赖的,建议打包后环境变量里改回去,避免使用其它程序时出错

注:11月20日,出现了SSL问题,包括smtplib和pip都存在,环境变量确定已经改回去了
下面这个博客给出了解决方法

使用第一个方法,在
https://slproweb.com/products/Win32OpenSSL.html 下载第一行exe大小为3m左右的安装包即可
如果需要pyinstaller打包的,需要把历史的一些缓存清除,否则可能会仍然出现SSL问题