诗歌包括轮子中的附加数据文件

问题描述 投票:0回答:1

我有一个简单的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 轮中包含附加资源文件的正确方法是什么?

python python-poetry python-wheel
1个回答
0
投票

正如您所提到的,我认为 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 有一些怪癖,它不完全遵循 标准。不过我觉得应该是对的。

© www.soinside.com 2019 - 2024. All rights reserved.