User Tools

Site Tools

Action disabled: source
prog:pythonuseful:20250221-001:index

Python程式打包成EXE (2025-02-21)

Local Backup

  • Video

為什麼要這麼做?

  • 最大的好處,就是可以直接一個壓縮包分發給別人,不需要再安裝Python,點擊就能運作。
  • 有自己的icon
  • 一定程度的保護程式碼
  • 透過將Python專案打包成可執行檔(EXE),我們可以輕鬆分享程序,並且無需擔心使用者的Python環境配置。此外,自訂圖示和程式碼保護功能也是打包的一大亮點。

用什麼打包?

  • 將Python工程打包成EXE文件,可以使用以下幾種方式:
    • 1. PyInstaller
      • 安裝:
        bash
        pip install pyinstaller
      • 打包:
        bash
        pyinstaller --onefile your_script.py
      • 這將產生一個單獨的可執行檔your_script.exe,位於dist 目錄中。
      • 常用選項:
        • –onefile: 產生單一執行檔
        • –windowed或–noconsole: 打包為視窗應用程式(不顯示控制台)
    • 2. cx_Freeze
      • 安裝:
        bash
        pip install cx_Freeze
      • 編寫setup.py:
        • 建立一個setup.py 文件,內容如下:
        • python
          from cx_Freeze import setup, Executable
          
          setup( name = “your_program_name”, version = “0.1”, description = “Your program description”, executables = [Executable(“your_script.py”)] )
      • 打包:
        • bash
          python setup.py build
        • 產生的EXE檔案位於build 目錄中。
    • 3. Py2exe
      • 安裝:
        • bash
          pip install py2exe
      • 編寫setup.py:
        • 建立一個setup.py 文件,內容如下:
        • python
          from distutils.core import setup
          import py2exe
          setup(console=['your_script.py'])
      • 打包:
        • bash

python setup.py py2exe</sxh>

  • 產生的EXE檔案位於dist 目錄中。
  • 4. Nuitka
  • Nuitka不僅可以將Python程式碼編譯為C++程式碼,還可以產生可執行檔。
  • 安裝:
  • bash
    pip install nuitka
  • 編譯:
  • bash
    nuitka --follow-imports --standalone your_script.py
  • 產生的EXE檔案位於目前目錄的your_script.dist 資料夾中。

總結

  • 選擇哪種工具可以根據具體需求決定:
    • PyInstaller:常用且支援多種選項,適合大部分應用。
    • cx_Freeze:靈活性高,適合複雜專案。
    • Py2exe:適合簡單項目,但僅支援Windows。
    • Nuitka:適合需要效能優化的專案。
  • 每種方法都有其優勢,可以根據專案的需求和個人偏好進行選擇。

如何打包?

  • 安裝PyInstaller:
    bash
    pip install pyinstaller
  • 使用PyInstaller打包:
    bash
    pyinstaller your_script.py

為什麼有錯誤,怎麼辦?

  • 1. Gradio UI需要手動加入Gradio模組:
    • 找到對應的spec文件,新增:
      python
      module_collection_mode={'gradio':'py',}
  • 2. 參數調用的錯誤:
    • python
      def parse_args():
          command_line_args = SimpleNamespace(
              llama_checkpoint_path="checkpoints/fish-speech-1.2",
              decoder_checkpoint_path="checkpoints/4x1024-42hz-generator.pth",
              decoder_config_name="firefly_gan_vq",
              device="cuda",
              half=False,
              compile=False,
              max_gradio_length=0,
          ) 
      return command_line_args
  • 3. 缺少資源:
    • 確保所有必要的資源檔案都包含在打包過程中,並且路徑正確。如果遇到缺少資源的錯誤,檢查資源檔案是否在專案的正確位置,以及打包工具的配置是否正確。

Permalink prog/pythonuseful/20250221-001/index.txt · Last modified: 2025/02/21 11:10 by jethro

oeffentlich