py檔案打包成exe可執行檔案

2021-10-06 17:28:39 字數 4692 閱讀 5837

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會有黑...