如何让setup.py在python -m build构建时正确引用源码仓库中的其他文件
问题根源
执行python -m build构建Python包时,默认仅会将配置声明的源码、README、setup相关文件复制到临时构建目录,你项目中的requirements目录未被纳入打包文件清单,因此setup.py执行时读取文件报错。而pip install -e .、git依赖安装是直接基于完整仓库目录执行,不会触发构建时的文件筛选逻辑,因此运行正常。
解决方案
步骤1:修正setup.py中的路径引用
首先将相对路径改为基于setup.py文件位置的绝对路径,避免因执行命令的工作目录变化导致的路径错误:
# 将原来的 requirements_dir = Path("requirements") 替换为 requirements_dir = Path(__file__).parent.resolve() / "requirements"
步骤2:将requirements目录纳入打包文件清单
二选一即可,优先推荐第一种兼容性更高:
方法1:使用MANIFEST.in配置(兼容所有setuptools版本)
在项目根目录新建名为MANIFEST.in的文件,写入以下内容:
recursive-include requirements *.txt
该配置会明确告知打包工具,构建sdist安装包时必须包含requirements目录下所有txt格式文件。
方法2:在pyproject.toml中配置(适合使用新版setuptools的项目)
如果项目根目录存在pyproject.toml文件,添加以下配置即可:
[tool.setuptools] include = ["requirements/**/*.txt"]
验证方法
配置完成后执行python -m build --sdist,解压dist目录下生成的.tar.gz包,检查包内是否存在requirements目录及对应的txt文件,确认存在后即可正常执行完整构建上传到PyPI。
内容的提问来源于stack exchange,提问作者Philip Couling
相关产品推荐
相关产品推荐

