使用pyinstaller打包.py文件時,會把很多已安裝的無關庫同時打包進去,導致打包生成的.exe文件體積過大。使用pipenv創建虛擬python環境,在虛擬環境中安裝.py文件所用到的庫(即py文件中import 的第三方庫),然后在pipenv所創建的虛擬環境中使用pip安裝打包所用到的pyinstaller。注意:本機安裝過pyinstaller的也要重新進入虛擬環境中安裝,不然會使用pyinstaller命令打包時,還是會生成大體積的.exe可執行文件。
但是實測感覺沒啥區別,小應該是會小一點的。
具體步驟如下:
情況一:初次打包
1、在命令行(CMD)使用pip命令安裝pipenv庫,用於創建虛擬環境
pip install pipenv
但是我安裝的時候,提示我的pip版本太低,讓我更新pip,但是我使用提示的python -m pip install --upgrade pip升級失敗,以下是三個解決方案:
1,使用python -m pip install --upgrade pip升級失敗
2,使用python -m pip install -U --force-reinstall pip依然失敗
3,使用pip install --user --upgrade pip成功升級
到這兒pip更新完畢,運行這條代碼可以看pip安裝了什么東西:pip list
這兒出現WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
出現這個后,可能會導致直接pip寫法時,會出現是外部文件或則不可執行程序,這個時候根據提示寫:python -m pip ...后即可執行了。
之后python -m pip install pipenv或則pip install pipenv安裝pipenv,但是出現安裝失敗,可能是因為找不到下載地址,或則沒有管理員權限。
這個時候采用下面兩個方法:
1,以管理員運行命令提示行,在安裝。
2,上述不行之后,采用調用國內鏡像庫安裝:
pip install keras -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
(其中的keras是你需要下載的,根據自己需求自行更改)即可安裝成功了應該。
看到pipenv之后說明已經安裝好了。
2、新建一個准備當環境的文件夾,並cd進入該文件夾
3、建立虛擬環境
pipenv install
4、進入虛擬環境(以下操作皆為虛擬環境下的操作)
pipenv shell
5、安裝.py文件用到的模塊
pip install 【.py用到的模塊】
6、安裝pyinstaller模塊,用於打包.py文件
pip install pyinstaller
7、使用pyinstaller打包文件
pyinstaller -Fw test.py(.py文件根據實際情況更改)
這里這個路徑的話,最好直接把要打包的文件放到本目錄下打包,不在本目錄下打包,test.py就要包含絕對路徑。
打包的程序運行出現no module name 【程序要引用的模塊】,采用pyinstaller的-p參數引入模塊的地址,多個地址以分號隔開;
8、結果文件
運行完第7步之后,在目錄下回生成‘dist’文件夾,里面存放的就是結果文件。
情況二:再次打包
若再次打包時,情況一中所創建的虛擬環境未曾刪除,可跳過情況一中的第1、2、3步,直接進行第四步進入虛擬環境。然后第5步同理保留原先添加過的py模塊,即若無新增新的模塊,可跳過第5步和第6步,直接進行第7步打包操作。
刪除虛擬環境:先exit()退出虛擬環境,然后刪除虛擬環境使用:pipenv --rm
要刪除虛擬環境,可以先卸載掉之前在虛擬環境中安裝的庫,既然都要刪了,那庫耶不用了。
1、cd進入此前創建虛擬環境的文件夾。
2、進入虛擬環境(以下操作皆為虛擬環境下的操作)
pipenv shell
3、安裝.py文件用到的模塊()
pip install 【相較上一次打包新增的模塊】
4、使用pyinstaller打包文件
pyinstaller -Fw test.py(.py文件根據實際情況更改)