【发布时间】:2021-02-23 15:04:56
【问题描述】:
我根据PEP420隐式命名空间打包方式创建了多个包。其中两个分发包是dende-github-api 和dende-gitlab-api。这些发行版中的每一个都包含一个模块,我希望可以在 dende.api 命名空间下访问该模块。可以在此处找到一个最小的工作示例:https://github.com/dende/example-monorepositry
这是包含两个发行版的存储库的文件夹结构:
example-monorepository
├── dende-github-api
│ ├── dende
│ │ └── api
│ │ ├── github.py
│ │ └── __init__.py
│ └── setup.py
├── dende-gitlab-api
│ ├── dende
│ │ └── api
│ │ ├── gitlab.py
│ │ └── __init__.py
│ └── setup.py
├── requirements.dev.txt
└── requirements.txt
setup.py 看起来像这样(仅针对 dende-github-api 显示):
from setuptools import setup
setup(
name='dende-github-api',
packages=['dende.api'],
install_requires=[
'PyGithub'
]
)
我可以安装这两个发行版并很好地使用它们:
$ pip install ./dende-github-api
$ pip install ./dende-gitlab-api
$ python -m dende.api.github
Hi from dende-github-api from /home/c/git/example-monorepositry/venv/lib/python3.8/site-packages/dende/api/github.py
$ python -m dende.api.gitlab
Hi from dende-gitlab-api from /home/c/git/example-monorepositry/venv/lib/python3.8/site-packages/dende/api/gitlab.py
当我在可编辑模式下安装两个发行版时,只有一个安装工作:
$ pip install -e ./dende-github-api
$ pip install -e ./dende-gitlab-api
python -m dende.api.gitlab
Hi from dende-gitlab-api from /home/c/git/example-monorepositry/venv/lib/python3.8/site-packages/dende/api/gitlab.py
python -m dende.api.github
/home/c/git/example-monorepositry/venv/bin/python: No module named dende.api.github
不知何故,第二次安装似乎掩盖了重叠命名空间中旧发行版的安装。是否可以在可编辑模式下安装这样的重叠包?
【问题讨论】:
-
顺便说一句,根据PEP 420:“命名空间包不能包含 __init__.py。”你的
setup.py都没有标记命名空间包,可以吗?
标签: python pip setuptools