【问题标题】:Python package-namespace: common test/docs/setup.py or one per namespace - which is the better pattern?Python 包命名空间:common test/docs/setup.py 或每个命名空间一个 - 哪种模式更好?
【发布时间】:2020-10-29 00:07:01
【问题描述】:

(为了透明起见,这是对here提出的问题的后续处理)

我正在处理命名空间包似乎很适合的相关文件。我正在遵循packaging authority 中的指南,该指南在每个命名空间包中放置了一个 setup.py;

mynamespace-subpackage-a/
    setup.py
    mynamespace/
        subpackage_a/
            __init__.py

mynamespace-subpackage-b/
    setup.py
    mynamespace/
        subpackage_b/
            __init__.py
        module_b.py

在我的测试中,创建了一个类似的项目。除了 setup.py 之外,我还为每个命名空间放置了单元测试、文档和其他内容(为了紧凑,我省略了一些目录。)。我使用 pyscaffold 来生成命名空间。

├── namespace-package-test.package1
│   ├── LICENSE.txt
│   ├── README.md
│   ├── setup.cfg
│   ├── setup.py
│   ├── src
│   │   └── pkg1
│   │       ├── cli
│   │       │   ├── __init__.py
│   │       │   └── pkg1_cli.py
│   │       └── __init__.py
│   └── tests
├── namespace-package-test.package2
│   ├── AUTHORS.rst

但是,我随后注意到 pyscaffold 可以选择在 putup 命令中创建命名空间包。

(venv) steve@PRVL10SJACKSON:~/Temp$ putup --force my-package -p pkg1 --namespace namespace1
(venv) steve@PRVL10SJACKSON:~/Temp$ putup --force my-package -p pkg1 --namespace namespace2

这会创建一个这样的文件夹结构;

├── AUTHORS.rst
├── CHANGELOG.rst
├── LICENSE.txt
├── README.rst
├── requirements.txt
├── setup.cfg
├── setup.py
├── src
│   ├── namespace1
│   │   ├── __init__.py
│   │   └── pkg1
│   │       ├── __init__.py
│   │       └── skeleton.py
│   └── namespace2
│       ├── __init__.py
│       └── pkg1
│           ├── __init__.py
│           └── skeleton.py
└── tests
    ├── conftest.py
    └── test_skeleton.py

所以我很矛盾;我信任 pyscaffold 的团队,但它与包装当局的示例背道而驰。

  1. 这两种方法都有效吗?
  2. 是否有理由选择一种方法而不是另一种方法?

【问题讨论】:

    标签: python package


    【解决方案1】:

    PyScaffold 中命名空间选项背后的想法是跨项目共享/重用命名空间(与在单个项目中拥有多个命名空间相反)。或者换句话说,将一个更大的项目拆分为独立维护/开发的项目。

    据我所知,具有您在第 4 个代码块中显示的结构是行不通的。对同一个根文件夹使用 putup --force 两次和 2 个不同的命名空间不是预期/支持的用法。

    PyScaffold 的方法与包权限相同,唯一的区别是 PyScaffold 会假设您在单个项目和 git 存储库中只包含一个包(PyScaffold 也使用src 目录,原因在Ionel's blog post)

    每个命名空间+包采用一个setup.py 的原因是构建单独的分发文件需要它(即每个*.whl 需要一个setup.py)。

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多