[英]Poetry trying to install everything from private repository
我正在嘗試從 pypi 和私人倉庫安裝依賴項,這是我原來的pyproject.toml
,遵循官方文檔:
[tool.poetry]
name = "project_name"
version = "0.1.0"
description = ""
authors = ["Me <me@gmyself.com>"]
[[tool.poetry.source]]
name = "private"
url = "https://url/to/private_repo"
secondary = true
[tool.poetry.dependencies]
python = "^3.9"
Flask = "^2.1.2"
private_package = "*"
[tool.poetry.dev-dependencies]
black = "^22.6.0"
mypy = "^0.961
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
但是,運行poetry install
會導致 poetry 嘗試安裝私有存儲庫中的每個要求,至少我從結果回溯中了解到:
❯ poetry install
Updating dependencies
Resolving dependencies... (0.2s)
RepositoryError
403 Client Error: Forbidden for url: https://url/to/private_repo/mypy/
at ~/.local/lib/python3.9/site-packages/poetry/repositories/legacy_repository.py:393 in _get
389│ if response.status_code == 404:
390│ return
391│ response.raise_for_status()
392│ except requests.HTTPError as e:
→ 393│ raise RepositoryError(e)
394│
395│ if response.status_code in (401, 403):
396│ self._log(
397│ "Authorization error accessing {url}".format(url=url), level="warn"
如您所見, poetry
似乎試圖從https://url/to/private_repo/mypy/
安裝mypy
。
到目前為止,我已經嘗試過:
pyproject.toml
文件中明確設置每個依賴項的source
(例如: mypy = {version = "^0.961", source = "pypi"}
):然后子依賴項也會發生同樣的事情poetry config repositories.private https://url/to/private_repo
設置私有存儲庫 url :似乎沒有任何影響[[tool.poetry.source]]
的default
鍵和secondary
鍵的所有可能組合:沒有任何幫助poetry add private_package --source private
私有依賴pypi
顯式添加源並將其設置為default
注意:我嘗試從中安裝的私有倉庫不需要任何類型的身份驗證
使用版本遇到此行為:
通過以下方式添加您的私人 pypi 詳細信息。
poetry config repositories.<pypiname> <url>
poetry config http-basic.<pypiname> <pypiname> <pypipassword>
然后檢查~/.config/pypoetry/auth.toml
是否正確。 它應該看起來類似
[http-basic]
[http-basic.<pypiname>]
username = "<pypiname>"
password = "<pypipassword>"
我遇到了完全相同的問題,並最終弄清楚poetry
已安裝但不知何故沒有同時安裝(我不知道如何或為什么)。 在我的詩歌環境中,我看不到詩歌版本pip show poetry
,所以我再次使用pip install poetry
了詩歌,現在它可以工作了。 不僅在我目前的詩歌環境中,而且在所有這些環境中。
您可以使用安裝私人 package
$詩歌添加https://url/to/private_repo/[path_to_source_package]
它應該會自動將 package 添加到您的 poetry.toml 文件中。 是推薦的方法https://python-poetry.org/docs/master/basic-usage/
或者你可以做
詩歌添加private_package==1.0.0 --extra-index-url https://url/to/private_repo
安裝依賴項時的問題是由於pip install -i
標志造成的,這就是它首先從私有存儲庫中獲取它們的原因。
使用-i
標志時,它將嘗試在指定的 URL 中安裝所有依賴項(以及這些依賴項的依賴項)。在您的情況下,它將是組織的私有提要。 由於默認情況下它是 PyPi,它將被您的私有存儲庫覆蓋,並且不會回退到 PyPi。
解決方案是將標志從-i
(或--index-url
)更改為--extra-index-url
,這將首先將 PyPi 作為默認存儲庫,並且僅在您的--extra-index-url
中查找包的 rest --extra-index-url
指定存儲庫(您的組織)。
有關更多信息,請查看https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-0
有一個單獨的案例,它使用了--extra-index-url
標志,但已經將依賴項上傳到您組織的私有提要。
與@diegogonzalezfe一起研究它,並查看這個 pip GitHub 問題https://github.com/pypa/pip/issues/8606#issuecomment-665547688 ,我們意識到這是一種安全行為,其中私有提要將接管作為 PyPi 的默認設置。
這方面的一個例子是:組織 A 創建 package deal_with_private_service_X
。 一個惡意的對手知道這一點,並上傳了一個 package 到 pip 同名但感染了惡意軟件。 現在,如果將 PyPi 作為默認設置,那么游戲就結束了。 Poetry 的行為很可能遵循這一原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.