如何将Python项目文件置于test_py_project顶级命名空间?
搞定Python项目命名空间问题的方法
1. 调整目录结构
把原来的src目录改成test_py_project,将common.py、foo1.py、foo2.py全部移进去,同时在这个新目录里添加一个空的__init__.py文件——Python需要这个文件识别目录为包。最终的目录结构应该是:
test_py_project/ ├── setup.py └── test_py_project/ ├── __init__.py ├── common.py ├── foo1.py └── foo2.py
2. 修改setup.py配置
更新setup.py里的打包参数,让它正确识别命名空间包。给你两种可行的写法:
- 自动识别包的写法:
from setuptools import setup, find_packages setup( name="test_py_project", version="0.1", packages=find_packages(), package_dir={"": "."}, )
- 手动指定包的写法:
from setuptools import setup setup( name="test_py_project", version="0.1", packages=["test_py_project"], package_dir={"test_py_project": "test_py_project"}, )
3. 修正模块内部的导入路径
如果foo1.py、foo2.py里之前导入了common.py,现在要改成包内的导入方式:
- 相对导入(包内部推荐使用):
from .common import 你需要的函数或类 - 绝对导入:
from test_py_project.common import 你需要的函数或类
4. 重新安装项目
执行以下命令重新安装项目:
python3 setup.py install --user
或者用pip更便捷:
pip install --user .
完成以上步骤后,你就可以通过import test_py_project.foo1或者from test_py_project import foo2来导入模块,模块会完全处于test_py_project命名空间下。
内容的提问来源于stack exchange,提问作者vladislav tcendrovskii
相关产品推荐
相关产品推荐

