簡體   English   中英

Poetry 試圖從私有存儲庫安裝所有內容

[英]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
  • 我在嘗試某事時清除緩存

注意:我嘗試從中安裝的私有倉庫不需要任何類型的身份驗證

使用版本遇到此行為:

  • 1.1.4
  • 1.1.3
  • 1.1.2

通過以下方式添加您的私人 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM