📏Python項目打包方法

pyinstaller 如何打包一個項目

在前面一篇介紹 pyinstaller 工具的時候咱們僅僅只是介紹了將單個文件製做成 exe 程序 : 📏用Python工具Pyinstaller製做exe應用程序 , 接下來咱們將介紹如何將一個項目製做成 exe 程序, pyinstaller 尚未安裝建議查看上面的鏈接html

-D 參數

以個人項目做爲示例展開介紹python

參數 參數全稱 參數說明
-D –onedir 打包多個文件,在dist中生成不少依賴文件,適合以框架形式編寫工具代碼,該方式代碼較易於維護

項目結構

#項目的根目錄
    - conf:
        - # 用於存放配置文件的文件夾
        - settings.py
    - core:
        - # 核心業務代碼
        - src.py
    - db:
        - # 用於存放文件數據
        - db_handler.py
        - song.json
    - interface:
        - # 接口, 接口內寫獲取數據前的邏輯代碼,經過後才能獲取數據
        - bank.py
        - shopping.py
        - user.py
    - lib:
        - # 存放公共功能文件
	- common.py
    - log:
        - # 用於存放日誌文件,日誌用於記錄用戶的操做記錄
        - log.log
    - atm.txt:
        - # 項目說明書, 用戶告訴使用者項目的操做
    - start.py
    	- # 啓動文件

上面不用看, 直接看下面的linux

image-20210302234321739

執行文件放在項目目錄下面json

打開 CMD 開始製做

  • 進入到項目目錄下, 就是執行文件所在的目錄windows

  • pyinstaller -D run.py數組

  • 執行成功後後生成臨時文件夾 build 和 dist (這兩個先不用管), 還有一個 run.spec 文件框架

  • 打開 run.spec 文件添加下面兩行(不添加很容易出錯, 踩過不少次) :工具

    import sys  # 先導入sys模塊
    sys.setrecursionlimit(100000)  # 設置最大遞歸深度 (緣由是程序裏可能出現遞歸調用)
  • 保存退出 , 接着執行pyinstaller run.spec, 等待完成, 中間有讓你確認的一個步驟, 按 y 就能夠ui

  • 出現 successfully 以後進入到 dist 文件下找到 run.exe 運行就能夠了編碼

步驟演示

🍊

image-20210302235944614

image-20210303000049286

出現successfully

🍊

image-20210303000146887

image-20210303000323321

保存退出

🍊

image-20210303000403608

image-20210303000531528

遇到這個按 y 回車, 出現 successfully 說明製做成功

🍊

image-20210303000701149

到 dist 路徑下找到 run.exe 雙擊運行

🍊

image-20210303000801315

功能正常

.spec 配置文件詳解

# -*- mode: python -*-
  
block_cipher = None
  
# 以py文件爲輸入,分析py文件的依賴模塊,並生成相應的信息
a = Analysis(['xxx.py'], # 要打包.py文件名列表,和xxx.py同級能夠不一樣添加
       pathex=['D:\\abc\\def\\project_v1.0'], # 項目路徑
       binaries=[], # 程序調用外部pyd、dll文件(二進制文件路徑)以數組形式傳入;例:('D:\\pro\\text.dll', 'pro'),將'pdftotext.dll'pro,與原項目結構一致便可
       datas=[], # 存放的資源文件(圖片、文本等靜態文件)以數組造成傳入;例:('D:\\static\\c.ioc','static'),將'cc.ioc'打包以後放在static目錄,與原項目結構一致便可
       hiddenimports=[], # pyinstaller解析模塊時可能會遺漏某些模塊(not visible to the analysis phase),形成打包後執行程序時出現相似No Module named xxx;這時就須要在hiddenimports中加入遺漏的模塊
       hookspath=[],
       runtime_hooks=[],
       excludes=[], # 去除沒必要要的模塊import,寫在excludes中添加此模塊
       win_no_prefer_redirects=False,
       win_private_assemblies=False,
       cipher=block_cipher)

# .pyz的壓縮包,包含程序運行須要的全部依賴
pyz = PYZ(a.pure, a.zipped_data, 
       cipher=block_cipher)
       
# 根據Analysis和PYZ生成單個exe程序所須要的屬性及其配置
exe = EXE(pyz,
     a.scripts,
     exclude_binaries=True,
     name='xxx', # 生成exe文件的名字
     debug=False, # debug模式
     strip=False,
     upx=True,
     console=False, # 是否在打開exe文件時打開cmd命令框
     icon='C:\Users\xx.ico' ) # 設置exe程序圖標,ico格式文件(16*16)
     
# 收集前三個部分的內容進行整合,生成程序所須要的依賴包,及資源文件和配置
coll = COLLECT(exe,
        a.binaries,
        a.zipfiles,
        a.datas,
        strip=False,
        upx=True,
        name='fastplot')
  • 文件過大盡可能使用 from...inport... 的導入方式
  • windows 儘可能使用絕對路徑,用雙斜槓\ \
  • linux路徑/home/my_project/...
  • 路徑避免使用中文

pyinstaller 參數

參數 參數全稱 參數說明
-F –onefile 打包成單個可執行文件,若是你的代碼都寫在一個.py文件,則可使用,若是是多個.py文件,建議不要使用。
-D –onedir 打包多個文件,在dist中生成不少依賴文件,適合以框架形式編寫工具代碼,該方式代碼較易於維護。
-K –tk 在部署時包含 TCL/TK。
-a –ascii 不包含編碼.在支持Unicode的python版本上默認包含全部的編碼。
-d –debug 產生debug版本的可執行文件
-w –windowed,–noconsole 使用Windows子系統執行.當程序啓動的時候不會打開命令行(僅對Windows有效)
-c –nowindowed,–console 使用控制檯子系統執行(默認)(只對Windows有效)
pyinstaller -c xxxx.py
pyinstaller xxxx.py --console
-s –strip 可執行文件和共享庫將run through strip。
注意Cygwin的strip可能使普通的win32 Dll沒法使用
-X –upx 若是有UPX安裝(執行Configure.py時檢測),則會壓縮執行文件(Windows系統中的DLL也會)
-o DIR –out=DIR 指定spec文件的生成目錄,若是沒有指定,並且當前目錄是PyInstaller的根目錄,會自動建立一個用於輸出(spec和生成的可執行文件)的目錄.若是沒有指定,而當前目錄不是PyInstaller的根目錄,則會輸出到當前的目錄下。
-p DIR –path=DIR 設置導入路徑(和使用PYTHONPATH效果類似) 能夠用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可使用多個-p參數來設置多個導入路徑,讓pyinstaller本身去找程序須要的資源
-i <FILE.ICO> –icon=<FILE.ICO> 將file.ico添加爲可執行文件的資源(只對Windows系統有效),改變程序的圖標 pyinstaller -i ico路徑 xxxxx.py
–i <FILE.EXE, N> –icon=<FILE.EXE, N> 將file.exe的第n個圖標添加爲可執行文件的資源(只對Windows系統有效)
-v FILE –version=FILE 將verfile做爲可執行文件的版本資源(只對Windows系統有效)
-n NAME –name=NAME 可選的項目(產生的spec的)名字.若是省略,第一個腳本的主文件名將做爲spec的名字

---end---

相關文章
相關標籤/搜索