1. PyInstaller 介紹

1.1. 什麼是 PyInstaller?

PyInstaller 是一個用於將 Python 程序打包成獨立可執行文件的工具,支持 Windows、Linux 和 macOS 操作系統。它可以將 Python 腳本及其依賴的庫和文件打包為一個獨立的應用程序,這樣用户在沒有安裝 Python 的情況下也可以運行程序。

1.2. 安裝 PyInstaller

在命令行中使用 pip 安裝 PyInstaller:

pip install pyinstaller

2. Pyinstall使用

2.1. 打包 Python 程序

使用 PyInstaller 打包 Python 程序時,執行以下命令:

pyinstaller your_script.py

這將會:

  • 在當前目錄創建一個 dist 文件夾,其中包含了打包好的可執行文件。
  • 生成一個 build 文件夾,其中包含了打包過程中的臨時文件。
  • 生成一個 .spec 文件,這個文件用於配置打包過程。

2.1.1. 常用選項

  • --onefile:將所有內容打包成一個單獨的可執行文件。
    pyinstaller --onefile your_script.py
  • --windowed:禁止在運行時顯示命令行窗口(適用於 GUI 程序)。
    pyinstaller --windowed your_script.py
  • --icon=icon.ico:為生成的可執行文件指定一個圖標。
    pyinstaller --icon=icon.ico your_script.py
  • --add-data=SOURCE:DEST:將額外的文件(如數據文件)打包到程序中。在 Windows 系統中,源路徑和目標路徑之間需要用分號(;)分隔:要將文件放入頂級應用程序目錄,請使用 . 作為 dest_dir。
    pyinstaller --add-data="data.txt;." your_script.py在 Windows 系統上,分隔符使用分號 ;,而在 Linux/macOS 系統上,使用冒號 :
    參考
pyinstaller --onedir --windowed --icon="D:\05_Code\python\bugzila\favicon.ico" --add-data="D:\05_Code\python\bugzila\paths.json:." "D:\05_Code\python\bugzila\fetch_buginfo_by_API_UI.py"

2.2. 打包後的文件結構

當你使用 PyInstaller 打包程序時,以下是生成的文件和文件夾結構:

your_script/
│
├── dist/
│   └── your_script.exe          # 最終的可執行文件
│
├── build/
│   └── your_script/             # 臨時構建文件
│
├── your_script.spec             # 配置文件,用於定製打包過程
└── your_script.py               # 原始的 Python 腳本

2.3. 自定義配置(使用 .spec 文件)

PyInstaller 生成的 .spec 文件用於定製打包過程。如果你想要更精細的控制(例如指定多個數據文件、修改打包的方式等),可以編輯這個文件並使用它來重新打包:

pyinstaller your_script.spec

.spec 文件中,你可以配置以下內容:

  • 隱藏控制枱窗口:設置 console=False 來避免在運行時彈出控制枱窗口(適用於 GUI 應用程序)。
  • 包含額外的數據文件或依賴庫:可以通過 datasbinaries 選項將額外的資源文件添加到打包文件中。

3. 注意事項和問題

  • 調試:如果在打包過程中遇到問題,可以加上 --debug 參數來進行調試。
    pyinstaller --debug your_script.py
  • 文件路徑問題:PyInstaller 打包後的程序可能會出現相對路徑問題。解決方法是使用 sys._MEIPASS 來獲取程序的運行路徑。
    python
import sys
import os

if hasattr(sys, '_MEIPASS'):
    base_path = sys._MEIPASS
else:
    base_path = os.path.abspath(".")
  • 文件權限問題,確保附帶打包文件路徑存在,
File "fetch_buginfo_by_API_UI.py", line 537, in <module>
  File "fetch_buginfo_by_API_UI.py", line 46, in load_paths
PermissionError: [Errno 13] Permission denied: 'D:\\05_Code\\python\\bugzila\\dist\\fetch_buginfo_by_API_UI\\_internal\\paths.json'
  • 外部庫:某些第三方庫(如 PyQt、Pandas 等)可能需要額外的配置或打包選項。

4. icon的獲取

4.1. 獲取網頁的圖標favicon

要獲取網頁的圖標,通常是指獲取網站的 favicon,它是顯示在瀏覽器標籤上的小圖標。你可以通過以下幾種方式獲取網頁的圖標:

4.1.1. 1. 從瀏覽器獲取網頁圖標--chrome沒用

  • 打開你想獲取圖標的網站。
  • 在瀏覽器的地址欄中,網站的 favicon 圖標會出現在網站 URL 左側,通常是一個小的圖標。
  • 右鍵點擊圖標並選擇 "複製圖片地址" 或 "保存圖片為",然後將其保存到本地。

4.1.2. 2. 查看網頁源代碼

  • 右鍵點擊網頁並選擇 "查看頁面源代碼"。
  • 搜索 <link rel="icon"> 標籤,它通常包含 favicon 圖標的鏈接,例如:
    html
    <link rel="icon" href="https://example.com/favicon.ico" />
  • 獲取該 URL 即為圖標的地址。

4.1.3. 3. 使用在線工具下載圖標

  • 一些網站提供下載網站 favicon 的服務。例如:
  • favicon.io:輸入網站 URL,網站會自動生成並允許下載網站的 favicon。
  • Real Favicon Generator:一個生成網站圖標和下載多種格式 favicon 的工具。

4.2. 網站下載

4.2.1. 推薦的圖標網站

如果你需要為你的應用程序或網站選擇其他圖標,以下是一些免費的圖標資源網站:

  1. IconFinder
    提供大量的免費和付費圖標,支持多種格式,可以按顏色、大小、主題等篩選。
  2. Flaticon
    擁有超過 300 萬個免費的圖標資源,提供 SVG、PNG、EPS、PDF 格式的圖標,適合各種設計需求。

標庫,提供了大量免費的 SVG 圖標,廣泛用於網站和 Web 應用的設計。

  1. IconArchive --免費的
    提供多種主題的圖標,涵蓋了操作系統圖標、應用圖標等,用户可以免費下載並使用。
  2. Material Icons
    Google 提供的 Material Design 圖標庫,提供豐富的圖標,適合 Web 和移動端應用。