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

如何通过Poetry将额外数据文件正确打包进Python Wheel?

正确配置Poetry打包额外资源到包目录下

针对你的场景,有两种可靠的方法可以将根目录的data文件夹打包进my_package目录下的Wheel包中,无需预构建脚本或符号链接:

方法1:通过packages配置映射文件路径

修改pyproject.toml的packages数组,新增一个条目指定文件的来源和目标路径:

[tool.poetry]
name = "my-package"
version = "2.10.0" 

packages = [
    { include = "my_package", from = "src/python" },
    # 将根目录data下的所有文件打包到my_package/data目录
    { include = "data/**/*", from = ".", into = "my_package" }
]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
  • include = "data/**/*":匹配根目录data下的所有文件和子文件夹
  • from = ".":指定文件的来源路径为仓库根目录
  • into = "my_package":指定打包后文件放入my_package目录下

方法2:通过data.files配置映射

另一种方式是使用tool.poetry.data.files明确指定文件映射关系:

[tool.poetry]
name = "my-package"
version = "2.10.0" 

packages = [
    { include = "my_package", from = "src/python" }
]

# 把根目录data下的所有文件映射到my_package/data路径
[tool.poetry.data.files]
"my_package/data" = ["data/**/*"]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

验证配置生效

运行poetry build生成Wheel包,找到dist目录下的.whl文件,解压后检查site-packages/my_package目录,确认data文件夹和stuff.json已存在。

你之前的include配置无效的原因是:全局include会将data文件夹直接放到site-packages根目录,而非目标包的子目录中。上述两种方法都能保持Wheel为纯Python包,不会引入CPython依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:53