有没有一种方法可以创建包含源代码的发行版。没有__init__.py的子包?

时间:2018-09-19 15:11:44

标签: python python-3.x setuptools

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

因此,请采用以下项目结构(我尝试类似于pytest documentation):

project_structure

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中根本没有源文件。只有在__init__.pypy_import_test下还有p1以及可能还有其他子包的情况下,它才起作用。

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

除了我关于__init__.py的问题:上述程序是否被认为是好的/现代的做法?

问候

1 个答案:

答案 0 :(得分:1)

您想要find_namespace_packages(以前称为find_packages)而不是find_packages_ns

需要最新版本的setuptools;该功能已添加到2018年8月发布的version 40.1.0中。

您还需要注意不要包含不旨在成为软件包的目录,但是已经拥有的where='src'应该可以解决这个问题。