小编典典

打包常见的python名称空间

python

我希望在接下来的几天中将必须打包的库打包并上载到PyPI,但是我不确定我对命名空间的使用方式。

我有一些其他的,不相关的项目,它们具有相似的方法,并希望为它们提供相同的名称空间。例如:

  • 库1名称空间: abc.seo
  • 库2名称空间: abc.ajax
  • 库3名称空间: abc.ecommerce
  • 等等

问题是我不确定两个单独的程序包(例如鸡蛋)是否可以与同一个父名称空间共存。这种方法有问题吗,还是可以解决?最好的方法是什么?

这些库不应打包在一起,因为它们太不相关了。我想在上传之前正确处理它,以避免在进行“正式”发布后痛苦的命名空间更改。

(NBabc不是真实的名字,我希望我的问题不包含广告)

更新

我采取了以下措施,以使没有安装setuptools的人们感到高兴:

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)

在以下内容中setup.py

setup(
    ...
    namespace_packages = ['rollyourown'],
    ...

阅读 277

收藏
2021-01-20

共1个答案

小编典典

在每个项目基本目录中,创建以下结构:

/setup.py
/abc/__init__.py
/abc/seo/

/abc/__init__.py 包含:

__import__('pkg_resources').declare_namespace(__name__)

setup.py 包含:

setup(...,
    packages: ['abc', 'abc.seo'],
    namespace_packages = ['abc']
    ...
)

参考文档:名称空间包

2021-01-20