[Python神器] AI生成的代码跑不起来?ImportError?用这个工具一键反向推导 pip 包名!
背景: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 ⭐ 和试用!