gpt4 book ai didi

python - 使用本地依赖项用诗歌构建可安装的 tar.gz/whl

转载 作者:行者123 更新时间:2023-12-01 07:13:50 26 4
gpt4 key购买 nike

我的Python项目中有以下结构:

├───pyproject.toml
└───mypackage

├───lib
│ localdep-0.2.0-py3-none-any.whl
│ localdep-0.2.0.tar.gz
└───service
app.py
home.py
modules.py

我需要使用mypackage/lib/localdep-0.2.0...中的诗歌和本地依赖项localdep构建mypackage只需使用简单的 pip install mypackage-0.1.0.tar.gz 命令即可安装 mypackage,无需任何其他文件。我尝试在 pyproject.toml 中使用 pathfile 说明符,但是我不断收到以下错误:

ERROR: Could not find a version that satisfies the requirement localdep(from mypackage==0.1.0) (from versions: none)

我的pyproject.toml的当前版本:

[build-system]
requires = [ "poetry>=0.12",]
build-backend = "poetry.masonry.api"

[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "Simple demo project."
authors = ["Some Author"]
license = "MPL 2.0"

[tool.poetry.dependencies]
python = "3.7.3"
localdep = {file = "mypackage/lib/localdep-0.2.0-py3-none-any.whl"}

有谁知道如何将本地依赖项传递给pyproject.toml,以便poetry build能够以正确的方式打包它?

最佳答案

诗歌的用例local dependency syntax和你需要的不一样,所以这里不能解决你的问题。

从这些文档中的使用示例中,您可以看到路径指向不属于包本身的包,它们总是首先保留根,如下所示:../some/different/location。整个构造仅在开发期间有用,其逻辑将通过 poetry install 运行,而不是 poetry build

您想要的是将本地依赖项与您的项目捆绑在一起,以便 pip 在部署项目的 .whl 期间知道从哪里提取本地依赖项。但由于 pyproject.toml 没有与轮元数据打包在一起,因此从何处获取依赖项的信息不再可用,因此它无法工作。构建的包只知道它有哪些依赖项,而不知道从哪里获取它们。这种哲学对于其他语言来说可能有 pip 不寻常,在其他语言中,将所有依赖项与代码捆绑在一起并不罕见。

因此,即使您能够构建包以包含另一个轮子,默认情况下这也不起作用,因为 setuptools 仅包含 sdist/中的 .py 文件默认情况下为 bdist,pip 无法知道依赖项是否可达。我看到有四种选择可以用 python 支持的方式解决您的问题。

  1. 使用 pyPI 上的 localdep 版本,或上传到那里。但如果有可能的话,你可能就不会问这个问题了。
  2. 如果 localdep 在您的控制之下并且仅由 mypackage 使用,请将其写入 mypackage 的简单子(monad)模块 - 读取,让 localdep 成为自己的软件包的最初决定是过度设计,这可能是真的,也可能不是。
  3. 使用 Python 能够理解的供应商 localdep 方式。拿this guide如需深入解释所有注意事项和陷阱,或 this hacky post如果您想让它发挥作用而不需要真正理解为什么或如何。
  4. 将您的软件包部署为“驾驶室”。
<小时/>

什么是驾驶室?

驾驶室部分需要更多的文字,但它可能最接近您最初的想法。在这种方法中,您不需要在项目中包含 localdep ,并且最好删除整个 mypackage/lib 文件夹。 localdep 只需要安装到您的 python 解释器中,您可以通过运行 pip freeze 并检查输出中 localdep 的名称和版本来确保这一 pip 。

然后,相同的输出将用于使用 pipwheel -w wheelhouse $(pip freeze) 构建所述驾驶室。如果您不想包含开发依赖项,delete your current virtualenv并在使用poetry install运行wheel命令之前设置并输入它;再次诗歌外壳

为了完整起见,您可以使用poetry build构建dist/myproject.whl并将其也放入其中,然后您可以使用这个驾驶室来安装通过使用您想要的任何 python 运行 python -m pip install wheelhouse/* ,您可以在任何地方安装您的软件包。

为什么要使用 pip 而不是诗歌呢?

Poetry 是一个用于开发包的依赖管理器,因此它不会过多地处理部署问题,并且仅以切线为目标。这通常很好,因为正如我们所见,pip 在这方面非常有能力。 pip 在开发过程中不太方便,这就是为什么 Poetry 很好,但是 Poetry 并不能完全取代 pip

关于python - 使用本地依赖项用诗歌构建可安装的 tar.gz/whl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com