如何在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_
相关产品推荐
相关产品推荐

