You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyproject.toml中排除data目录下的Python源码文件?

解决setuptools排除开发用脚本文件的问题

我来帮你搞定这个问题!你遇到的核心问题是:setuptools的packages.find配置里的exclude参数是用来排除**整个子包(目录)**的,没办法直接匹配单个.py文件,所以你之前的写法不管用。下面给你几个靠谱的解决办法:

方法1:用exclude_package_data精准排除单个文件

这是最直接的方案,专门用来排除包内的指定文件。修改你的pyproject.toml:

[tool.setuptools]
packages = find:

# 可选:如果需要包含data目录下的其他文件,先声明要包含的内容
[tool.setuptools.package_data]
"mypackage.data" = ["*"]

# 重点:排除prepare.py
[tool.setuptools.exclude_package_data]
"mypackage.data" = ["prepare.py"]

如果mypackage/data目录下本来就没有需要打包的其他文件,你可以省略package_data部分,直接写exclude_package_data即可。

方法2:用MANIFEST.in文件控制分发内容

在项目根目录创建一个MANIFEST.in文件,写入以下内容:

exclude mypackage/data/prepare.py

这个文件会告诉setuptools在生成源码包(sdist)和wheel包时跳过指定文件,默认情况下setuptools会自动读取这个文件,不需要额外配置。

方法3:排除整个data子包(如果不需要将其作为Python包)

如果mypackage/data目录不需要被当作Python包(比如没有__init__.py,或者只是用来存资源文件),你可以直接把整个子包从packages.find里排除,再按需添加需要的资源文件:

[tool.setuptools.packages.find]
where = ["."]
exclude = ["mypackage.data"]

# 示例:如果需要包含data目录下的csv文件,可这样配置
[tool.setuptools.data_files]
"mypackage/data" = ["mypackage/data/*.csv"]

总结一下,方法1是最推荐的,因为它精准针对单个开发脚本排除,不会影响其他需要打包的内容。

内容的提问来源于stack exchange,提问作者k_o_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:35:26