前言
python編譯成EXE文件后,可以獨立使用。親測,一個復雜的python工程包含多個包多個模塊,可以生成exe文件。
目的
windows下將整個python工程編譯成單個EXE或者單個目錄帶EXE文件
工具
PyInstaller(windows,源代碼python3.6)
步驟
- 項目根目錄下新建frozen_dir.py
- 凍結路徑(防止編譯成exe后相對路徑找不到)
# -*- coding: utf-8 -*- import sys import os # 凍結路徑,所有路徑以此為基准,打包后才能使用 def app_path(): """Returns the base application path.""" if hasattr(sys, 'frozen'): # Handles PyInstaller return os.path.dirname(sys.executable).replace("\\", "/") return os.path.dirname(__file__).replace("\\", "/")
- 凍結路徑(防止編譯成exe后相對路徑找不到)
- 路徑引用
-
import frozen_dir root_path = frozen_dir.app_path() path = os.path.join(root_path, default_path)
-
-
根目錄下新建入口文件main.py
-
from test import main if __name__ == '__main__': main()
-
-
根目錄下新建編譯文件build.py
-
# -*- coding: utf-8 -*- import PyInstaller.__main__ import frozen_dir SETUP_PATH = frozen_dir.app_path() def build(): PyInstaller.__main__.run([ '--name=%s' % "main", # 生成的exe文件名 ['--onedir', '--onefile'][0], # 單個目錄 or 單個文件 '--noconfirm', # Replace output directory without asking for confimation ['--windowed', '--console'][1], '--add-binary=./dll/python3.dll;.', # 外部的包引入 '--add-binary=%s' % SETUP_PATH + '/config/logging.yaml;config', # 配置項
'--add-data=%s' % SETUP_PATH + '/config/config.ini;config', # 分號隔開,前面是添加路徑,后面是添加到哪個目錄 '--hidden-import=%s' % 'sqlalchemy.ext.baked',
'--hidden-import=%s' % 'frozen_dir', # 手動添加包,用於處理 module not found 'main.py', # 入口文件 ]) if __name__ == '__main__': build()
-
-
運行build文件,根目錄下dist/main/main.exe 為可執行文件,雙擊可運行。運行閃退的話,可以cmd進入到相關路徑運行main.exe,缺失的包在build.py文件中添加hidden-imports項。