如何在可编辑模式下安装多个Python命名空间包

How to install multiple python namespace packages in editable mode(如何在可编辑模式下安装多个Python命名空间包)
本文介绍了如何在可编辑模式下安装多个Python命名空间包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我根据PEP420隐式命名空间打包方法创建了多个包。其中两个分发包是dende-github-apidende-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
不知怎么的,第二个安装似乎在重叠的名称空间中隐藏了旧版本的安装。是否可以在可编辑模式下安装类似这样的重叠包?

推荐答案

您的两个模块都在常规包dende.api中,因为它们都包含__init__.py。因此,它们实际上并不在隐式名称空间包中。两个dende.api中只有一个可用。

仅在意外地以不可编辑模式安装它们时才起作用,因为这些文件被写入到磁盘上的同一目录中,而不是因为命名空间包机制。

您可以通过删除__init__.py从而使dende.api成为命名空间包,或者通过将这两个api重命名为不同的包github-apigitlab-api来修复该问题,然后这两个包都位于命名空间包dende中。

有关某个相关问题的命名空间包机制的更详细解释(为什么将命名空间包放在常规命名空间包中几乎没有什么意义)可以在此处找到:https://stackoverflow.com/a/62992832

这篇关于如何在可编辑模式下安装多个Python命名空间包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)