为什么我不能使用 `exclude` 从我的 python 轮中排除 `tests` 目录?

sma*_*rie 7 python setuptools python-wheel

考虑以下包结构:

在此处输入图片说明

有以下setup.py内容:

from setuptools import setup, find_packages

setup(
    name='dfl_client',
    packages=find_packages(exclude=['*tests*']),
    include_package_data=True,
    package_data={"": ['py.typed', '*.pyi']},
)
Run Code Online (Sandbox Code Playgroud)

当我使用 打包它时python setup.py sdist bdist_wheel,产生的轮子:

我花了几个小时试图理解为什么没有成功。特别是因为它似乎适用于其他项目!

sma*_*rie 7

(我花了很多时间试图理解这个愚蠢的问题,所以我回答了我自己的问题,希望可以为面临同样问题的其他人节省时间)

我终于找到了罪魁祸首:它是setuptools_scminclude_package_data=Trueflag之间的隐藏交互。

就其本身而言,include_package_data=True不会使tests目录包含在轮子中。但是,如果setuptools_scm已安装并且该文件夹受版本控制(并且该tests目录在 git 管理的文件列表中),则该exclude指令似乎不再被考虑在内。

所以解决方案只是删除include_package_data=True,当package_data存在时实际上不需要:

from setuptools import setup, find_packages

setup(
    name='dfl_client',
    packages=find_packages(exclude=['*tests*']),
    package_data={"": ['py.typed', '*.pyi']},
)
Run Code Online (Sandbox Code Playgroud)

请参阅有关包含文件的 setuptools 文档(实际上非​​常简单include_package_data)以及此相关问题和解决方法(该解决方法似乎也适用于轮子,不仅适用于 sdist)。

  • 谢谢!花了几个小时研究同一问题后,我终于找到了答案。 (2认同)