为什么我不能使用'exclude'从python控制盘中排除'tests'目录?

2024-03-28 14:04:21 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下封装结构:

enter image description here

具有以下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']},
)

当我使用python setup.py sdist bdist_wheel对其进行打包时,生成的轮子:

  • 包含py.typed文件,这很好
  • 包含tests文件夹,但应根据the ^{} doc排除该文件夹

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


Tags: namefrompyimport文件夹package内容data
1条回答
网友
1楼 · 发布于 2024-03-28 14:04:21

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

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

本身,include_package_data=True不会使tests目录包含在控制盘中。但是,如果安装了setuptools_scm,并且文件夹处于版本控制之下(并且tests目录位于git管理的文件列表中),那么exclude指令似乎不再被考虑

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

from setuptools import setup, find_packages

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

参见setuptools doc on including files(关于include_package_data,这实际上非常简单)和this related issue and workaround(解决方法似乎也适用于轮子,而不仅仅是sdist)

相关问题 更多 >