我有一个简单的Python包,我们称之为
my_package
。
其文件位于
src/python/my_package
。
此外,存储库根目录中有一个 data
文件夹,该文件夹应包含在 my_package
内生成的 python 轮中。
.
├── src
└── python
└── my_package
├── data
└── stuff.json
├── pyproject.toml
我没有找到任何方法来配置诗歌,它以正确的方式包含附加的
data
文件夹。
这是我的
pyproject.toml
[tool.poetry]
name = "my-package"
version = "2.10.0"
packages = [
{ include = "my_package", from = "src/python" }
]
# This does not work! It puts the `data` folder into site-packages/data instead of site-packages/my_package/data
include = [
{ path = "data", format = ["sdist", "wheel"] }
]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
我还使用预构建脚本找到了以下解决方案: https://github.com/python-poetry/poetry/issues/5539#issuecomment-1126818974
问题:它改变了轮子,不再纯粹了,而是依赖于CPython。
也尝试过使用符号链接,但这不起作用:How to include symlinks and the linked file in a python wheel using Poetry?
问题: 使用诗歌在 python 轮中包含附加资源文件的正确方法是什么?
正如您所提到的,我认为 include 是处理它的正确方法。
我会重新排列目录结构,以便
pyproject.toml
更容易处理它。我在想类似以下的事情:
mypackage
├── mypackage
| └── src
| | └── my_package.py
| └── data
| └── stuff.json
├── pyproject.toml
然后将适当的
__init__.py
文件放在适当的位置以供发现(如果需要)。
最后,我认为对
pyproject.toml
的以下调整应该有效。
packages = [
{ include = "my_package", from = "mypackage/src" }
]
include = [
{ path = "mypackage/data", format = ["sdist", "wheel"] }
]
我无法测试,因为我使用 PDM 而不是 Poetry,而 Poetry 有一些怪癖,它不完全遵循 标准。不过我觉得应该是对的。