如何让Python包安装时包含模板等非代码文件?
解决Python包安装时模板文件未被纳入的问题
问题背景
你的仓库目录结构如下:
report: report.py template.dat template_testline.dat
在pyproject.toml中仅配置了:
[tool.setuptools] packages = [ "report" ]
安装后发现只有report.py被放到了site-packages的report目录下,模板文件template.dat和template_testline.dat未被包含。
解决方案
Setuptools默认只会自动包含Python源码文件(.py、.pyc等),要让非Python文件也被打包安装,可通过以下两种方式配置:
方式一:用package_data指定需包含的文件
在pyproject.toml中添加package_data配置,明确指定report包下的模板文件:
[tool.setuptools] packages = [ "report" ] package_data = { "report": ["template.dat", "template_testline.dat"] }
如果后续有同类型模板文件,也可用通配符简化:
package_data = { "report": ["*.dat"] }
方式二:用include_package_data配合MANIFEST.in
- 先在
pyproject.toml中开启自动包含配置:
[tool.setuptools] packages = [ "report" ] include_package_data = true
- 在项目根目录创建
MANIFEST.in文件,写入文件匹配规则:
include report/template.dat include report/template_testline.dat
同样支持通配符批量匹配:
include report/*.dat
验证
修改配置后,重新执行安装命令(如pip install .),再查看site-packages下的report目录,即可看到模板文件已被包含。
内容的提问来源于stack exchange,提问作者MortenB
相关产品推荐
相关产品推荐

