Python使用pyproject.toml和setup.cfg打包自定义模块的导入问题
问题根因
你遇到的嵌套导入问题核心是项目根目录被识别成了Python包,同时编辑模式安装的旧缓存/残留配置导致路径异常。
解决步骤
1. 清理旧安装残留
多次执行以下命令,直到提示没有安装dummy包为止,避免多版本冲突:
pip uninstall -y dummy
2. 删除多余的__init__.py
检查你外层的dummy项目根目录下是否存在__init__.py文件,如果有直接删除。项目根目录不需要该文件,只有实际存放业务代码的内层dummy目录才需要保留__init__.py。
3. 修正配置错误(可选,可同时完全移除setup.py)
你当前的配置有两个可优化的点,调整后可以完全删除冗余的setup.py文件:
- 把setup.cfg
[metadata]段下的zip_safe = False移到[options]段下,该配置不属于元数据段 - 在setup.cfg
[metadata]段添加版本自动读取配置,不需要再通过setup.py读取版本:
[metadata] name = dummy version = attr: dummy._version.__version__ # 其他原有元数据配置保持不变
调整后直接删除整个setup.py文件即可,当前版本的setuptools已经支持直接从模块属性读取版本号。
4. 重新安装
切换到项目根目录的上层目录,重新执行开发模式安装:
pip install -e dummy
验证
安装完成后执行以下命令验证导入路径是否正常:
python -c "import dummy; print(dummy.__version__); from dummy.subpackage1 import script1; print('子模块导入成功')"
正常输出版本号和「子模块导入成功」即配置生效。
内容的提问来源于stack exchange,提问作者André Lourenço
相关产品推荐
相关产品推荐

