python setup.py sdist 仅包含顶层模块的 .py 源文件

30 投票
3 回答
11757 浏览
提问于 2025-04-17 13:52

我有一个setup.py文件:

from setuptools import setup

setup(
      ...
      packages=['mypackage'],
      test_suite='mypackage.tests',
      ...
    )

python setup.py sdist 这个命令会生成一个文件,这个文件只包含了顶层的mypackage中的源代码模块,而不会包含mypackage.tests或者其他的子模块。

我哪里做错了呢?

我使用的是python 2.7。

3 个回答

3

只需要把你所有的子模块都放到包的列表里就可以了:

from setuptools import setup

setup(
      ...
      packages=['mypackage', 'mypackage.tests', 'mypackage.submodules'],
      ...
     )
3

对于那些使用纯 distutils 而不是 setuptools 的人来说,你需要在 packages 参数中传入所有的包和子包的列表(但不需要列出所有的子模块,因为它们会自动被识别)。

32

使用find_packages()函数

from setuptools import setup, find_packages

setup(
    # ...
    packages=find_packages(),
)

这个函数会去找Python包,也就是那些包含有__init__.py文件的文件夹,并把找到的包以正确的格式列出来。它会从和setup.py脚本同一个目录开始找,不过你也可以指定一个其他的起始目录。如果你想让它跳过某些东西,还可以设置排除的规则。

撰写回答