我是使用 Azure 的新手,特别是我的问题与发布 python 包有关。我有一个用 poetry 管理的包,我在 twine 的帮助下将其发布到私人存储库。我用来发布的命令如下(在这部分我已经在虚拟环境中安装了artifacts-keyring)
poetry build
python -m twine upload -r ${ARTIFACT_FEED} --config-file /PYPIRC dist/*
这里,
ARTIFACT_FEED
是提要的名称。我对这些命令没有任何问题,并且包发布也没有问题。
现在,要使用一个也用诗歌管理的项目,并且使用我已经发布的其他包,我想做
poetry add my_package_name
以
pyproject.toml
作为诗歌的文献
[[tool.poetry.source]]
name = "foo"
url = <MY_PRIVATE_COMPANY_REPO_URL>
secondary = true
在虚拟环境中安装
artifacts-keyring
后,我收到此错误 401 Client Error: Unauthorized for url: <MY_PRIVATE_COMPANY_REPO_URL>
。使用pipenv
我也有同样的问题。好吧,也许poetry
不支持这种身份验证。相关链接:
管理员可以更改身份验证类型吗?当我进入 Connect to feed 页面时,我看到这个
所以,似乎是强制使用
artifacts-keyrings
。在之前的项目中,对于另一家公司,我们使用了基本身份验证,就像这样
poetry publish --repository <PRIVATE_REPO> --username <USERNAME> --password <PASSWORD> --build
然后安装软件包我没有问题。
您可以使用基本身份验证,用户名可以是任何内容,密码必须是个人访问令牌。
Poetry 目前可以与
artifacts-keyring
配合使用,请参阅 python-poetry#4086。
Pipenv 可以,但您的虚拟环境需要安装
artifacts-keyring
,在主安装中安装 azure-devops-artifacts-helpers
并配置 virtualenv 以使用它提供的 azdo-pip
播种器使生活更轻松。
#powershell
python -m pip install --user azure_devops_artifacts_helpers artifacts-keyring
[Environment]::SetEnvironmentVariable("VIRTUALENV_SEEDER", "azdo-pip", "Machine")
[Environment]::SetEnvironmentVariable("PIP_INDEX_URL", "https://pkgs.dev.azure.com/XXXXX/_packaging/YYYYY/pypi/simple/", "Machine")
Pipfile:
[[source]]
url = "${PIP_INDEX_URL}"
name = "azdo"
理论上,可以通过创建自己的密钥环实现来欺骗(?)诗歌使用工件密钥环,该实现检测诗歌何时基于服务值使用密钥环,解构所述值,查找私有存储库的 url,然后执行您自己的密钥环查找,其中包含 url,然后查找 url 的“netloc”(只是 dns 名称)部分,因为这就是 Pip 所做的。
祝你好运!
因为我花了几个小时才弄清楚这一点: 看来问题是你需要在全球范围内为诗歌安装“artifacts-keyring”:
poetry self add artifacts-keyring
一旦我这样做了,我就可以:
poetry add --source my-feed my-package