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,产生的轮子:
py.typed文件,这很好tests的文件夹,而应根据被排除的find_packages文档。我花了几个小时试图理解为什么没有成功。特别是因为它似乎适用于其他项目!
(我花了很多时间试图理解这个愚蠢的问题,所以我回答了我自己的问题,希望可以为面临同样问题的其他人节省时间)
我终于找到了罪魁祸首:它是setuptools_scm和include_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)。