[英]Packaging and building python namespace packages
我想做什么?
拥有一台大型 package 和几个可安装部件,需要一起工作,但特定部件可以单独使用。 我决定使用命名空间 package,因为它似乎可以满足我的要求。
问题
我如何实际构建命名空间 package?
我的例子
我有一个以下命名空间 package,每个子包都包含一些此处未列出的模块。 我正在使用setuptools
。
.
|-mypkg
|- core
| |- setup.py
| |- mynmspc
| |- util
|- compute
| |- setup.py
| |- mynmspc
| |- funcs
|- plotting
|- setup.py
|- mynmspc
|- graphs
- setup.py
现在我可以构建这个 package python setup.py bdist_wheel
的轮子。 但是,如果我想自己安装例如core
子包,我是否必须为它创建另一个轮子? 如果我想让用户选择安装整个 package 或任何列出的子包,那么最佳实践是什么? 有没有办法自动构建主package的所有嵌套轮子?
如果你想使用最新的 python 本地命名空间包来允许用户安装类似扩展的包( mypkg-core
, mypkg-compute
,...),你应该像这样为每个 package 创建不同的文件夹
mypkg-core/
mypkg/ # no __init__.py here
core/
__init__.py
setup.py
mypkg-compute/
mypkg/ # no __init__.py here
compute/
__init__.py
setup.py
每个setup.py
如下所示
from setuptools import setup, find_namespace_packages
setup(
name='mypkg-core',
...
packages=find_namespace_packages(include=['mypkg.*'])
)
您需要为每个 package 构建一个 whl。
通过此配置,用户将能够
pip install mypkg-core
pip install mypkg-compute
并通过相同的mypkg
命名空间访问它们:
import mypkg.core
import mypkg.compute
不要忘记在setup.py
中为每个 subpkg 使用find_namespace_package
中的setuptools
。
请始终参考有关本地命名空间包的官方文档。 .
但是,我会建议一种更简单的方法来分发您的 package,方法是将子包依赖项添加为与子包名称分组的extras
项。 这样,用户只有在安装整个 package 时才能使用子包
pip install mypkg[compute]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.