pyinstaller打包工具
官網:一、安裝命令:pip3 install pyinstaller
二、打包命令(首先開啟cmd命令視窗):
1.進入專案目錄下,否則打包後的檔案要在以c:/user/owner下面
c:\users\owner> cd e:\pythonworkspaces\dealtxt
c:\users\owner> e:
e:\pythonworkspaces\dealtxt> pyinstaller –clean –win-private-assemblies -fw winmain.py -p fileutil.py –hidden-import fileutil #注意此方法在其它電腦會報找不到動態鏈結庫
或e:\pythonworkspaces\dealtxt> pyinstaller –clean –win-private-assemblies -dw winmain.py -p fileutil.py –hidden-import fileutil
或e:\pythonworkspaces\dealtxt> pyinstaller -fw winmain.py -p fileutil.py –hidden-import fileutil #注意此方法在其它電腦會報找不到動態鏈結庫
或e:\pythonworkspaces\dealtxt> pyinstaller -dw winmain.py -p fileutil.py –hidden-import fileutil
三、多檔案打包
命令格式如下,下命令為一條命令,為方便顯示做了分行處理:
pyinstaller [主檔案] -p [其他檔案1] -p [其他檔案2]
–hidden-import [自建模組1]
–hidden-import [自建模組2]
# 以上為一整條命令
例如:pyinstaller main.py -p mysql.py -p other.py –hidden-import mysql –hidden-import other
四、用到其它依賴時,用上面的方法打包比較麻煩,可以採用spec檔案方法
1、整體流程
pyi-makespec winmain.py # 先生成spec檔案
pyinstaller winmain.spec # 再生成exe檔案
2、引數說明
-f :打包成乙個exe檔案(在dist資料夾下)
pyi-makespec -fw winmain.py
pyinstaller winmain.spec
-d :生成乙個包含exe的資料夾
pyi-makespec -dw winmain.py
pyinstaller winmain.spec
需要打包數個檔案時,編輯spec檔案
用文字編輯器開啟spec檔案,修改檔案中的引數 datas=
例如要打包 global_popu.tif 到exe中時
pec檔案中的引數修改為datas=[('global_popu.tif', '.')]
然後將spec檔案編譯成exe,兩點注意:
將資料檔案和***.py檔案放在同一目錄
對***.py程式讀取資料的部分需要修改,修改方法如下
a = analysis(['trip_popu.py'],
pathex=['e:\\github\\zone\\zone'],
binaries=,
datas=[('global_popu.tif', '.')],
hiddenimports=,
hookspath=,
runtime_hooks=,
excludes=,
win_no_prefer_redirects=false,
win_private_assemblies=false,
cipher=block_cipher,
noarchive=false)
複製**# 對***.py的修改
# 新增自定義的函式
def resource_path(relative_path):
base_path = getattr(
sys, '_meipass', os.path.dirname(
os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
#global_popu_dic = resource_path("global_popu.tif") # 打包時使用
global_popu_dic = "../data/global_popu.tif" # 除錯時使用
datas=[('china_light_2016.tif', '.'),('china_population_2016.tif', '.')]
多個py檔案
整體操作與上述類似,關鍵在於修改spec中的引數
例如:code資料夾下的trip_popu.py用到了zone_func資料夾目錄下的func.py檔案,
在spec檔案中的analysis的第乙個引數中加上func.py檔案的絕對路徑,然後生成exe即可
a = analysis(['trip_popu.py','e:\\github\\zone\\zone\\zone_func\\func.py'],
pathex=['e:\\github\\zone\\zone'],
binaries=,
datas=[('global_popu.tif', '.')],
hiddenimports=,
hookspath=,
runtime_hooks=,
excludes=,
win_no_prefer_redirects=false,
win_private_assemblies=false,
cipher=block_cipher,
noarchive=false)
複製**多程序打包
編寫的程式中包含多程序處理時,正常打包執行exe後,電腦會卡死
所以在打包前,需先要對***.py檔案進行修改,修改內容為:
import multiprocessing
if __name__ == "__main__":
multiprocessing.freeze_support() # 這一句一定要放在if __name__ == "__main__":下面
複製**修改後,正常打包即可
問題記錄
程式有使用到shapely庫,打包時會提示缺少geos.dll
將提示的shapely庫的路徑下的geos_c.dll複製乙份重新命名為geos.dll,重新打包即可
程式有使用到geopandas庫,打包時執行後提示
file "site-packages\geopandas\datasets\__init__.py", line 7, in
stopiteration
複製**找到geopandas庫檔案下的__init__.py,將import geopandas.datasets這句注釋掉
程式有使用到sklearn庫時,打包執行時提示缺少一些模組,如sklearn.utils._cython_blas
修改spec檔案中的hiddenimports引數後,重新打包,修改如下
a = analysis(['mainarea_buffer.py','e:\\github\\zone\\zone\\zone_func\\func.py'],
pathex=['e:\\github\\zone\\zone'],
binaries=,
datas=[('global_popu.tif', '.')],
hiddenimports=['sklearn.utils._cython_blas','cython', 'sklearn', 'sklearn.ensemble','sklearn.neighbors.typedefs','sklearn.neighbors.quad_tree','sklearn.tree._utils','scipy._lib.messagestream'],
hookspath=,
runtime_hooks=,
excludes=,
win_no_prefer_redirects=false,
win_private_assemblies=false,
cipher=block_cipher,
noarchive=false)
五、命令語法:pyinstaller -f 檔名(帶字尾py)
#常用引數說明:
#–icon=圖示路徑
#-f 打包成乙個exe檔案
#-w 使用視窗,無控制台
#-c 使用控制台,無視窗
#-d 建立乙個目錄,裡面包含exe以及其他一些依賴性檔案
#pyinstaller -h 來檢視引數
#將cmd的目錄切換至(命令:cd 檔案路徑(注意空格))需要打包的py檔案目錄下:
#有命令視窗彈出
pyinstaller -f winmain.py
#無命令視窗彈出
pyinstaller -f -w winmain.py
#或者pyinstaller -f winmain.py –noconsole
打包好的exe檔案,在同目錄的 dist 檔案中,如果有依賴檔案,就可以放到dist資料夾下即可
將py檔案打包成exe可執行檔案
將python 打包成exe可執行檔案 日常生活中,我們可以很輕鬆的實現,運用程式設計 實現我們想要實現的各種功能,解決各種問題,但是如果要將我們編寫好的 給別人使用,如果要他們直接使用我們的 就需要安裝各種編譯軟體 以及第三方模組,還要對軟體操作,程式設計有一定的了解,這對使用者的要求比較高,不是...
python打包成exe可執行檔案
把做好的py檔案打包成exe 我們要用到pyinsatller這個包 安裝pyinsatller pip3 install pyinstaller例如我們的py 為 輸入兩個數,求兩個數之和。x input 請輸入第乙個數 y input 請輸入第二個數 z float x float y prin...
python 打包成exe 可執行檔案
1,安裝pyinsatller pip3 install pyinstaller 2,使用pyinstaller打包python程式 pyinstaller f w i icofile filename filename表示你的python程式檔名 w 表示隱藏程式執行時的命令列視窗 不加 w會有黑...