使用python3.7+anaconda環境編寫了個程式,裡面使用了numpy pandas xgboost等包
想用pyinstaller打包成exe,pip install pyinstaller後無法打包成exe檔案
別人說是pyinstaller不相容python3.7
遂安裝py3.6環境,試圖隔離不需要的包安裝,失敗。只好安裝venv:
pip install virtualenv
,命名此環境為venv1,什麼包都沒有
參考 cmd(管理員)進入 \venv1\venv\scripts\ 資料夾後輸入activate,啟用環境,此時提示符前會有(venv)字樣
pip install 需要的包,只安裝需要的包,這樣可以減小打包後程式大小,並防止奇奇怪怪的錯誤
還是這個venv環境,安裝好後cd進入python程式所在的路徑:
pyinstaller -d **
*.py
打包出exe檔案了!在打包資料夾的dist資料夾裡,命令列cd到exe檔案所在路徑後執行,出錯,提示distutils模組出錯,
modulenotfounderror: no module named 'distutils'
[10373
] failed to execute script
但distutils是python自帶的模組,所以不是包沒裝全的問題,找到如下方法:
# work-around for
import distutils
if distutils.distutils_path.endswith(
'__init__.py'):
distutils.distutils_path = os.path.dirname(distutils.distutils_path)
將以上**貼入打包exe時生成的 *.spec檔案開頭,清理build目錄重新生成exe檔案就可以了。生成方法:
pyinstaller -d **
*.spec
pyinstaller又會像剛才一樣在打包一次,期間會問你此操作會刪除dist資料夾全部的檔案要繼續嗎,摁y繼續,然後就又生成了乙個exe檔案,還在dist資料夾裡。
命令列cd到exe檔案所在路徑後執行,出錯,提示缺少xgboost的dll。解決辦法:開啟venv所在的*\venv1\venv\lib\site-packages\xgboost*,發現裡面確實沒有dll,可以從網上找xgboost.dll檔案放裡面,如下圖。我從網上找的都不行,從虛擬環境外面的anaconda資料夾裡找到了,複製貼上到下圖所在的資料夾。
然後把整個資料夾扔到打包出的exe檔案所在同目錄下。不用再打包一遍了,直接cmd裡執行,成功。
##########################分割線#################################
轉天打包另乙個檔案,有了一些新問題
這次沒在venv裡打包,直接在3.6&anaconda環境裡打包成功了
生成exe後執行,丟擲錯誤 modulenotfounderror: no module named 'typedefs『
查閱得此文章
基本情況差不多,稍微有點區別
在打包過程中生成的***.spec檔案中(***是自己打包時的py檔名)的第二行新增如下兩行**:
import sys
sys.setrecursionlimit(
5000
)
然後再輸入命令 pyinstaller ***.spec --hidden-import sklearn.neighbors.typedefs,進行打包
成功
pyinstaller打包使用
pyinstaller manage.py 如果直接打包報錯,使用如下命令可以直接生成配置檔案 pyi makespec d manage.py生成的配置檔案格式如下 mode python coding utf 8 block cipher none a analysis impala etl.p...
Pyinstaller的打包使用
toc 1,pyinstaller的安裝 執行 pip install pyinstaller 2,常用打包方式 單一檔案,pyinstaller f i iconame.ico filename.py 非單一檔案,pyinstaller d i iconame.ico filename.py 3,...
pyinstaller打包程式
python打包成exe檔案時,用的是pyinstaller 第一步安裝pyinstaller pip install pyinstaller第二步 pyinstaller f w i ico py其中 ico 是logo,py是你要打包的py檔案 我在打包時出現了struct.error unpa...