为什么我不能使用 `exclude` 从我的 python 轮中排除 `tests` 目录?
Why can't I exclude `tests` directory from my python wheel using `exclude`?
考虑以下包结构:
具有以下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 find_packages
doc. 应排除该文件夹
我花了几个小时试图理解为什么没有成功。特别是因为它似乎适用于其他项目!
(我花了很多时间试图理解这个愚蠢的问题,所以我回答了我自己的问题,希望能为面临同样问题的其他人节省时间)
我终于找到了罪魁祸首:它是 setuptools_scm
和 include_package_data=True
标志之间的隐藏交互。
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']},
)
参见 setuptools doc on including files (that is actually very straightforward about include_package_data
) and this related issue and workaround(解决方法似乎也适用于 wheel,而不仅仅是 sdist)。
考虑以下包结构:
具有以下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
文件夹,但根据 thefind_packages
doc. 应排除该文件夹
我花了几个小时试图理解为什么没有成功。特别是因为它似乎适用于其他项目!
(我花了很多时间试图理解这个愚蠢的问题,所以我回答了我自己的问题,希望能为面临同样问题的其他人节省时间)
我终于找到了罪魁祸首:它是 setuptools_scm
和 include_package_data=True
标志之间的隐藏交互。
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']},
)
参见 setuptools doc on including files (that is actually very straightforward about include_package_data
) and this related issue and workaround(解决方法似乎也适用于 wheel,而不仅仅是 sdist)。