背景:AI 時代的“依賴地獄”
在 Cursor、GitHub Copilot 和 ChatGPT 普及的今天,我們的開發模式變了。以前是我們先 pip install 再寫代碼,現在是 AI 直接甩給我們一段完美的代碼:
import cv2
from PIL import Image
import sklearn
from google.cloud import storage
import ujson
代碼邏輯看起來沒問題,但當你試圖運行它時:
ModuleNotFoundError: No module named 'cv2'
ModuleNotFoundError: No module named 'sklearn'
你開始瘋狂 Google:
- cv2 是裝 opencv-python 還是 opencv-python-headless?
- PIL 是裝 Pillow 嗎?
- sklearn 對應的包名是啥來着?scikit-learn?
- google.cloud.storage 是裝 google 還是 google-cloud 還是 google-cloud-storage?
如果項目裏有幾十個文件,幾百個 import,手動查找簡直是噩夢。傳統的 pip freeze 需要環境裏已經裝好了包,而 pipreqs 等工具在處理複雜映射(如 cv2, PIL)時往往不夠準確。
為了解決這個問題,我開發了 pyimport2pkg。
什麼是 PyImport2Pkg?
GitHub 地址:buptanswer/pyimport2pkg
PyPI 地址:pip install pyimport2pkg
PyImport2Pkg 是一個 Python 導入語句到 pip 包名的反向映射工具。它不靠猜,而是基於 PyPI 大數據構建的映射數據庫,專門解決“知道模塊名但不知道包名”的問題。
它的核心能力:
- 準確識別異名包:完美處理 cv2 → opencv-python,PIL → Pillow 等經典難題。
- 命名空間支持:精準區分 google.cloud.storage 和 google.ads,不會籠統地讓你裝 google。
- 智能分析:遞歸掃描項目,區分必需依賴和可選依賴(能識別 try-except 塊)。
- 速度飛快:基於本地優化的 SQLite 數據庫,毫秒級查詢。
快速上手
1. 安裝
需要 Python 3.10+:
pip install pyimport2pkg
2. 一鍵生成 requirements.txt
在你的項目根目錄下運行:
pyimport2pkg analyze . -o requirements.txt
它會自動掃描所有 .py 文件,解析 import,匹配最佳的 pip 包,並生成文件。
3. 單獨查詢某個令人困惑的包
比如你想知道 cv2 到底該裝啥:
pyimport2pkg query cv2
輸出:
Module: cv2
Source: hardcoded
Candidates:
1. opencv-python (recommended)
2. opencv-contrib-python
3. opencv-python-headless
技術硬核:為什麼它比 pipreqs 好用?
在開發 pyimport2pkg 之前,我深入研究了 Python 的導入機制(詳見我的 GitHub 項目文檔)。
很多工具只是簡單的字符串匹配,而 pyimport2pkg 解決了以下 14 種極端情況:
- 命名空間包 (Namespace Packages):如 zope.*, azure.* 的精確解析。
- 版本感知:自動檢測你的 Python 版本(例如 enum34 在 Py3.4+ 不需要安裝)。
- 別名注入:處理像 win32api 這種物理文件在 win32 目錄下但 import 名字完全不同的情況。
- 幽靈依賴:分析代碼邏輯中的條件導入。
性能實測
| 項目規模 | 分析時間 |
|---|---|
| 小型 (\<100 文件) | \< 1 秒 |
| 大型 (1000+ 文件) | 5-30 秒 |
總結
在 AI 輔助編程的時代,不要把時間浪費在“找包名”這種重複勞動上。pyimport2pkg 就是你 IDE 裏的最佳僚機。
目前項目已經發布 v1.0.0 穩定版,歡迎大家 Star ⭐ 和試用!
傳送門:https://github.com/buptanswer/pyimport2pkg