如何确定Python包的导入名与项目名的对应关系?
解决Python包导入名与项目名映射的问题
一、获取每个包的导入名
- 查看源码目录结构:直接看包的源码根目录,能被Python导入的目录(Python 3.3+支持无
__init__.py的命名空间包,低版本需要包含该文件)的名称就是导入名。比如导入用import abc_def,源码里必然存在abc_def目录。 - 从已安装环境查询:如果包已安装到Python环境,执行
pip show <项目安装名>,在输出的Location字段找到安装路径,进入后查看实际的包目录名,即为导入名。 - 解析配置文件的隐含设置:
- 带
setup.py的包:导入名由packages参数指定(如packages=['abc_def']),或通过find_packages()自动识别的目录名;若用了package_dir配置(如package_dir={'': 'src'}),则看对应源码目录下的包名。 - 用
pyproject.toml的包:导入名通常由[tool.setuptools.packages]下的配置决定,比如find = {}会自动识别源码里的包目录;若用Poetry,则看[tool.poetry]下的packages配置(如packages = [{ include = "abc_def" }])。你之前没找到可能是因为用了自动发现逻辑,未显式配置。
- 带
二、通过导入语句反查项目名
- 从已安装环境反向追溯:
- 在Python交互环境执行以下代码,获取模块路径:
import abc_def print(abc_def.__file__) - 根据路径找到包的根目录,查看同级的
dist-info或egg-info文件夹(如company_name_abc_def.dist-info),文件夹名通常对应项目安装名;或进入该文件夹查看METADATA文件,其中Name字段即为项目安装名。
- 在Python交互环境执行以下代码,获取模块路径:
- GitLab仓库批量排查:若包未安装,可批量遍历仓库:
- 检查每个仓库的源码目录,定位导入名对应的目录;
- 查看仓库内的
setup.py、pyproject.toml或requirements.txt文件,提取项目名称; - 结合安装命令规律(如
pip install company-name-abc-def)匹配对应导入名。
三、规范配置避免后续混乱
- 不管用
setup.py还是pyproject.toml,显式指定项目名和导入名:- 在
setup.py中明确写name="company-name-abc-def"和packages=["abc_def"]; - 在
pyproject.toml的[tool.setuptools]下设置name = "company-name-abc-def",并在[tool.setuptools.packages]里指定include = ["abc_def"];
- 在
- 给每个仓库添加README文档,明确标注项目安装名和导入名,方便后续快速查找。
内容的提问来源于stack exchange,提问作者The Maestro
相关产品推荐
相关产品推荐

