Pandas等庫在Anaconda環境下打包巨大的解決方法

我的python是使用anaconda集成包的,雖然很方便,但是之前寫的很多程序,因爲pandas、openpyxl等庫通過pyinstaller打包會出現很多奇葩問題,而且即使打包出來也會很大(有pandas的情況下大概200+M)。
之前羣裏小夥伴有提示,通過虛擬環境可以解決這個問題,所以花了半天時間測試了各種情況,最終終於解決了這個問題。
我今天總共測試了3種方法,參考了大量的博客,可能在別人的情況下成功過,但是在我這裏只有第三種方法是真正成功的。

方法一:Anaconda創建虛擬環境並打包(失敗)
參考貼:https://www.cnblogs.com/valorchang/p/11358541.html
失敗分析:雖然用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
https://blog.csdn.net/frostime/article/details/90523062
失敗分析:其實方法二應該是可以成功的,我後來想了下,有可能是因爲系統設置裏的環境變量沒有修改導致的。
而且這邊需要注意的一點是,打包後雖然仍然很大,但是已經可以正常運行了,說明virtualenv版本問題的確存在。

方法三:直接用純淨版本Python並打包(成功)
參考貼:https://blog.csdn.net/weixin_40924580/article/details/102855334
經歷了上述兩個失敗,再看了上面的帖子,我開始轉變思路:既然anaconda屢試屢敗,那不如我繞開?
系統裏已經裝好了anaconda(3.7.3)和純淨python(3.7.2)兩個版本(版本不一樣,是我故意而爲之,主要爲了區分),既然程序的運行需要使用到環境變量,那我把anaconda的環境變量刪除不就行了?
系統屬性——高級——環境變量進入設置窗口
在這裏插入圖片描述
上面的用戶變量,以及下面的系統變量中的Path,把anaconda相關的幾個全部刪除,只保留純淨Python的環境變量
我的anaconda環境變量如下(強烈建議備份!):
在這裏插入圖片描述
我的純淨Python環境變量如下:
在這裏插入圖片描述
修改好環境變量後,做的事情就和前面2步的一樣了:

1、pip install 幾個庫
以我上一個帖子《Pandas:寫了一個簡易的銷量異常檢測器》爲例
https://blog.csdn.net/weixin_42029733/article/details/103063620
需要用到的第三方庫主要就是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下找到打包好的文件,運行正常

在這裏插入圖片描述
在這裏插入圖片描述
3、如果是對anaconda有重大依賴的,建議打包後環境變量裏改回去,避免使用其它程序時出錯

注:11月20日,出現了SSL問題,包括smtplib和pip都存在,環境變量確定已經改回去了
下面這個博客給出瞭解決方法
https://blog.csdn.net/marueibo/article/details/86678936
使用第一個方法,在
https://slproweb.com/products/Win32OpenSSL.html
下載第一行exe大小爲3m左右的安裝包即可
如果需要pyinstaller打包的,需要把歷史的一些緩存清除,否則可能會仍然出現SSL問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章