有没有办法创建一个源分发包括。没有 __init__.py 的子包?

Is there a way to create a source distribution incl. subpackages without __init__.py?

是否可以使用 python setup.py sdist 创建源代码分发而不必在每个(子)包(python 3.5+)中使用某种 __init__.py 文件?我真的很想只使用命名空间包来避免任何冗余和开销。应包含所有子包中的所有嵌套 .py-文件。

所以采取以下项目结构(我试图类比pytest documentation):

setup.py:

from setuptools import setup, find_packages
setup(
    version="0.0.1",
    name="py_import_test",
    package_dir={"": "src"},
    packages=find_packages(where='src')
)

main.py 中,我使用类似

的东西
import py_import_test.p1.helloworld
# do something with helloworld-module

当我 python setup.py sdist 使用上述项目结构时,我在生成的 .tar.gz 中根本没有源文件。它仅在 py_import_testp1 和可能的进一步子包下有 __init__.py 时才有效。

总而言之,我的目标是拥有一些独立的应用程序包,我可以用它来测试并轻松地将我的包安装到远程服务器。为此,我希望源代码树尽可能精简并利用最新的 python 打包模式。

除了我关于 __init__.py 的问题:上述程序是否会被视为 good/modern 实践?

问候

而不是 find_packages,您需要 find_namespace_packages(以前称为 find_packages_ns)。

需要安装工具的最新版本;该功能是在 version 40.1.0 中添加的,于 2018 年 8 月发布。

您还需要注意不要包含不打算作为包的目录,但是您已经拥有的 where='src' 应该会处理这个问题。