请考虑以下包结构:
具有以下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应将其排除。我花了数小时试图理解为什么没有成功。特别是因为它似乎适用于其他项目!
((我花了很多时间试图理解这个愚蠢的问题,我回答了我自己的问题,希望可以节省其他面临相同问题的时间)
我终于找到了罪魁祸首:这是find_packages
和setuptools_scm
标志之间的隐藏交互。
include_package_data=True
本身不会使include_package_data=True
目录包含在转盘中。但是,如果安装了tests
且该文件夹受版本控制(并且setuptools_scm
目录位于git管理的文件的列表中),则似乎不再考虑tests
指令。
所以解决方案是简单地删除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非常简单)和include_package_data
(该解决方法似乎也适用于方向盘,不仅限于sdist)。