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