我想在我的项目中使用预发布版本的包 (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
$
这在这里有描述。基本上,您可以通过以下方式添加存储库:
poetry config repositories.test https://test.pypi.org/simple/
然后通过以下方式在
pyproject.toml
中提供它:
[[tool.poetry.source]]
name = "test"
url = "https://test.pypi.org/simple/"
secondary = true
然后添加依赖项应该可以工作。
在诗歌 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 作为辅助源存在问题,原因有两个:
这使您容易受到依赖混淆攻击:
想象一下,您在依赖项中使用了某个著名的包
famous-package = "^1.2.0"
,并且该包在 TestPyPi 上不存在(因为开发人员从未将其推送到那里)。
然后任何人都可以将1.99.99
的受感染版本famous-package
推送到TestPyPi,您的项目就会下载它。然后它可以在您的计算机上运行任意代码。
为了避免这种情况,poetry 建议将
priority = "secondary"
替换为 priority = "supplemental"
,这意味着只有在主要源没有找到任何兼容的软件包发行版时才会调用该源。
但是使用
priority = "explicit"
然后明确选择应该从 TestPyPi 下载哪些包会更安全。