繁体   English   中英

打包和构建 python 命名空间包

[英]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-coremypkg-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM