Python库pip名称与导入名称不一致,如何查询对应关系?
解决pip包名与Python导入名不一致的查询问题
当你遇到ModuleNotFoundError,怀疑是pip安装的包名和代码中导入的名称不匹配时,可以用以下几种方法快速查询对应关系:
1. 查看包的安装目录结构
- 先用
pip show <pip包名>获取包的安装路径,比如查询pycryptodome:
输出里的pip show pycryptodomeLocation字段就是包的安装目录。 - 进入该目录下的
site-packages文件夹,找到对应包的顶层文件夹名称——这个就是Python代码中需要用的导入名。比如pycryptodome安装后,site-packages里会有Crypto文件夹,所以导入用import Crypto。
2. 查看包的配置文件
- 用
pip download <pip包名> --no-deps下载包的源码压缩包,解压后查看:- 旧版包会有
setup.py,里面的packages参数或py_modules参数会明确标注导入名; - 新版包会有
pyproject.toml,查看[project]下的packages字段。
- 旧版包会有
3. 用Python代码自动查询
运行以下代码,替换目标pip包名即可返回对应的导入名:
import pkgutil import importlib.metadata def get_import_name(pip_package_name): # 遍历所有已安装的包 for dist in importlib.metadata.distributions(): # 忽略大小写匹配pip包名 if dist.metadata["Name"].lower() == pip_package_name.lower(): # 获取包内的顶层模块名 for module in pkgutil.iter_modules(dist.files): return module.name return "未找到对应导入名" # 示例:查询pycryptodome的导入名 print(get_import_name("pycryptodome")) # 输出:Crypto
4. 常见不一致包清单
整理了部分高频遇到的包对应关系:
pycryptodome→Cryptobeautifulsoup4→bs4python-dateutil→dateutilpyyaml→yamlopencv-python→cv2pillow→PIL
内容的提问来源于stack exchange,提问作者Bagheera
相关产品推荐
相关产品推荐

