【问题标题】:Is there a way to create a source distribution incl. subpackages without __init__.py?有没有办法创建一个源分布,包括。没有 __init__.py 的子包?
【发布时间】:2018-09-19 15:11:44
【问题描述】:

是否可以使用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 的问题:上述程序是否被认为是一种好的/现代实践?

问候

【问题讨论】:

  • 只需将__init__.py 文件放入目录中,它们就会神奇地变成包。别担心,他们不会字节!

标签: python python-3.x setuptools


【解决方案1】:

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

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

您还需要注意不要包含不打算作为包的目录,但是您已经拥有的 where='src' 应该注意这一点。

【讨论】:

  • 谢谢,就像一个魅力。我之前必须pip install setuptools --upgrade
猜你喜欢
  • 2015-11-23
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2016-09-06
  • 2013-08-22
  • 2014-02-13
相关资源
最近更新 更多