根据实际或事实上的标准,Python src 文件夹中还包含哪些内容?

dav*_*one 4 python python-packaging

当在 Python 项目中使用src 布局而不是平面布局时,除了项目模块之外,文件夹中是否还有其他内容src

\n

我的理解是,如果我在下面的布局中添加under并将结果发布到 PyPI,任何执行过 a 的人都mypkg2能够(这可能令人惊讶)。我错过了什么吗?srcpip installimport mypkgimport mypkg2

\n
project_root_directory\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml  # AND/OR setup.cfg, setup.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src/\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mypkg/\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module.py\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subpkg1/\n        \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n        \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module1.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subpkg2/\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module2.py\n
Run Code Online (Sandbox Code Playgroud)\n

来自https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#src-layout的示例布局

\n

我无法找到包含其他任何内容的项目示例,也无法找到不要在其中放置任何其他内容的明确指示。我正在寻找可以回答这个问题的 PEP 或包装文件。

\n

sin*_*roc 5

在正确src布局的项目中,目录中唯一应该存在的src顶级 导入包顶级导入模块(显然,子包位于顶级包的子目录中)。

按照惯例,每个发行包都包含一个且仅有一个顶级 导入包(或顶级导入模块)。我想这个约定是问题中要求的“事实上的标准”。

在问题中显示的示例的情况下,如果项目同时具有src/mypkgsrc/mypkg2目录,那么该项目将具有 2 个顶级导入包,这是非常规的(但可能)。

不遵循此约定的项目的著名示例是setuptools,它有 2 个顶级导入:setuptoolspkg_resources

我不知道有任何权威文档可以阐明布局的这一具体点src,我能找到的最接近的是Python 打包用户指南上的“ src 布局与平面布局