如何使用诗歌从 test.pypi.org 安装软件包?

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

我想在我的项目中使用预发布版本的包 (https://test.pypi.org/project/delta-spark/2.1.0rc1/)。

我正在使用

poetry
来管理我的
pyproject.toml
。我该怎么做?

换句话说,

poetry
相当于:

pip install -i https://test.pypi.org/simple/ delta-spark==2.1.0rc1

我尝试过:

  • poetry add delta-spark==2.1.0rc1
  • poetry add --allow-prereleases delta-spark==2.1.0rc1

两者都给出:

Could not find a matching version of package delta-spark


$ poetry config --local repositories.test-pypi https://test.pypi.org/
$ poetry config --list | fgrep repositories
repositories.test.url = "https://test.pypi.org/"
repositories.test-pypi.url = "https://test.pypi.org/"
$ fgrep -A 3 tool.poetry.source pyproject.toml 
[[tool.poetry.source]]
name = "test-pypi"
url = "https://test.pypi.org/"
secondary = true
$ poetry add --group dev delta-spark==2.1.0rc1

Could not find a matching version of package delta-spark
$ 
python pip dependency-management python-poetry
2个回答
6
投票

这在这里有描述。基本上,您可以通过以下方式添加存储库:

poetry config repositories.test https://test.pypi.org/simple/

然后通过以下方式在

pyproject.toml
中提供它:

[[tool.poetry.source]]
name = "test"
url = "https://test.pypi.org/simple/"
secondary = true

然后添加依赖项应该可以工作。


0
投票

在诗歌 1.5.0 中,

secondary = true
已被弃用。

这里有一个更安全的解决方案,以确保只有您想要的包裹 从 TestPypi 下载:

[[tool.poetry.source]]
name = "test-pypi"
url = "https://test.pypi.org/simple/"
priority = "explicit"

[tool.poetry.dependencies]
my-package = {version = "0.1.1", source = "test-pypi"}

为什么更安全?

根据poetry的文档, 二手来源已被弃用。

使用 TestPyPi 作为辅助源存在问题,原因有两个:

  1. 它适用于您的所有项目依赖项,而不仅仅是您想要使用 TestPyPi 版本的项目依赖项。
  2. 始终为每个依赖项调用 TestPyPi,即使在主要源中找到兼容版本也是如此。

这使您容易受到依赖混淆攻击

想象一下,您在依赖项中使用了某个著名的包

famous-package = "^1.2.0"
,并且该包在 TestPyPi 上不存在(因为开发人员从未将其推送到那里)。 然后任何人都可以将
1.99.99
的受感染版本
famous-package
推送到TestPyPi,您的项目就会下载它。然后它可以在您的计算机上运行任意代码。

为了避免这种情况,poetry 建议将

priority = "secondary"
替换为
priority = "supplemental"
,这意味着只有在主要源没有找到任何兼容的软件包发行版时才会调用该源。

但是使用

priority = "explicit"
然后明确选择应该从 TestPyPi 下载哪些包会更安全。

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