python工程編譯成EXE


前言

  python編譯成EXE文件后,可以獨立使用。親測,一個復雜的python工程包含多個包多個模塊,可以生成exe文件。

目的

   windows下將整個python工程編譯成單個EXE或者單個目錄帶EXE文件

工具

  PyInstaller(windows,源代碼python3.6)

步驟

      1. 項目根目錄下新建frozen_dir.py
        1.   凍結路徑(防止編譯成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("\\", "/")
      2. 路徑引用
        1. import frozen_dir
          root_path = frozen_dir.app_path()
          path = os.path.join(root_path, default_path)
      3. 根目錄下新建入口文件main.py

        1. from test import main
          if __name__ == '__main__':
              main()
      4. 根目錄下新建編譯文件build.py

        1. # -*- 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()
      5. 運行build文件,根目錄下dist/main/main.exe  為可執行文件,雙擊可運行。運行閃退的話,可以cmd進入到相關路徑運行main.exe,缺失的包在build.py文件中添加hidden-imports項。  

              

         

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM