如何通过pyproject.toml在Python包中包含.json文件?
解决Python打包时JSON文件被忽略的问题
你的问题源于两处关键配置错误,修正后即可正常包含JSON文件:
1. 包名拼写错误
项目结构中是src/align目录,但你的pyproject.toml里写的是src.multiply_align,这会导致setuptools找不到对应子包,自然不会包含其中的JSON文件。
2. Package-Data路径配置错误
package-data的路径是相对于对应包的根目录,而非项目根目录的绝对路径。比如src.align包下的params.json,直接写文件名即可,不需要前缀src/align/。
修正后的pyproject.toml内容
[build-system] requires = ["setuptools>=68.0"] build-backend = "setuptools.build_meta" [project] name = "myproject" version = "0.0.1" description = "description" readme = "README.md" requires-python = ">=3.9" license = {file = "LICENSE.txt"} authors = [ {name = "John Doe"} ] classifiers = [ "Programming Language :: Python :: 3" ] [project.scripts] myproject = "src.main:main" [tool.setuptools] packages = ["src", "src.align"] # 修正包名 include-package-data = true [tool.setuptools.package-data] "src.align" = ["params.json"] # 修正路径,直接写包内文件名
额外验证与优化建议
- 清理旧构建缓存后重新安装:运行
pip install --force-reinstall .,或先删除build/、dist/和*.egg-info目录再执行安装。 - 安装后可到conda环境的
Lib/site-packages/src/align目录下,确认params.json是否存在。 - 代码中读取文件时,建议使用包相对路径避免硬编码问题:
import json from importlib.resources import files # 读取src/align/params.json params_path = files("src.align").joinpath("params.json") with open(params_path, "r") as f: params = json.load(f)
内容的提问来源于stack exchange,提问作者Kaleb Zuckerman
相关产品推荐
相关产品推荐

