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

