Python包名称空间:common test/docs/setup.py或每个名称空间一个-哪种模式更好?

Python包名称空间:common test/docs/setup.py或每个名称空间一个-哪种模式更好?,python,package,Python,Package,(为了提高透明度,这是对所提问题的后续行动) 我正在处理相关文件,其中名称空间包似乎非常适合。我遵循的指南来自,它在每个名称空间包中放置一个setup.py mynamespace-subpackage-a/ setup.py mynamespace/ subpackage_a/ __init__.py mynamespace-subpackage-b/ setup.py mynamespace/ subp

(为了提高透明度,这是对所提问题的后续行动)

我正在处理相关文件,其中名称空间包似乎非常适合。我遵循的指南来自,它在每个名称空间包中放置一个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的团队,但这与包装管理局的例子背道而驰

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

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

    据我所知,使用第四个代码块中显示的结构是不可行的。使用
    putup--force
    对同一根文件夹使用两个不同的名称空间不是预期/支持的用法

    PyScaffold的方法与package authority相同,唯一的区别是PyScaffold将假定您在单个项目和git存储库中只包含一个包(PyScaffold还使用
    src
    目录,原因如中所述)

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