30

我有一个 setup.py:

from setuptools import setup

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

python setup.py sdist创建一个仅包含来自顶级 mypackage 的源模块而不包含 mypackage.tests 或任何其他子模块的文件。

我究竟做错了什么?

使用 python 2.7

4

3 回答 3

31

使用find_packages()功能

from setuptools import setup, find_packages

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

该函数将搜索 python 包(带有__init__.py文件的目录)并将它们作为格式正确的列表返回。它将从与 setup.py 脚本相同的目录开始,但可以指定一个明确的起始目录,以及排除模式(如果您需要它来跳过某些内容)。

于 2013-01-28T00:12:13.273 回答
3

对于使用纯 distutils 而不是 setuptools 的人:您必须在 packages 参数中传递所有包和子包(但不是所有子模块,它们都被检测到)的列表。

于 2013-01-29T15:11:56.343 回答
3

只需在包列表中包含所有子模块:

from setuptools import setup

setup(
      ...
      packages=['mypackage', 'mypackage.tests', 'mypackage.submodules'],
      ...
     )
于 2018-10-07T23:08:55.067 回答