python - 在本地(非 Azure)docker 实例中使用来自 Azure feed 的 python 包

标签 python azure docker package python-keyring

我创建了一个 PoC Azure 管道来在 feed 中创建一个包,如下所示:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.7'
    addToPath: true
    architecture: 'x64'
  displayName: 'Deploy Python 3.7'

- script: |
    python -m pip install --upgrade pip
    pip install twine
  displayName: 'Install dependencies'


- script: |
    python setup.py sdist
  displayName: 'Package creation'


- task: TwineAuthenticate@1
  inputs:
    artifactFeed: 'Project/Feed'
  displayName: 'Set Artifact Authentiation'


- script: 'twine upload -r Feed --config-file $(PYPIRC_PATH) dist/*'
  displayName: 'Publish Artifact'  

我正在尝试使用以下命令在我的笔记本电脑(不是 Azure)上的 docker 实例中进行 pip 安装:

FROM python:3.7.9-buster

ADD . /package-consumer/

RUN wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb && dpkg -i packages-microsoft-prod.deb

RUN apt-get update && apt-get install -y apt-transport-https && apt-get install -y dotnet-sdk-5.0

RUN pip install keyring artifacts-keyring

RUN  pip install --index-url=https://pkgs.dev.azure.com/Org/Project/_packaging/Feed/pypi/simple/ Package

CMD cd /package-consumer && python Consume/UsePackages.py

正如预期的那样,我得到了

[Minimal] [CredentialProvider]DeviceFlow: https://pkgs.dev.azure.com/causewayltd/Mobile/_packaging/Mobile/pypi/simple/
[Minimal] [CredentialProvider]ATTENTION: User interaction required. 

    **********************************************************************

    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code **** to authenticate.

    **********************************************************************

[Error] [CredentialProvider]Device flow authentication failed. User was presented with device flow, but didn't react within 90 seconds.

我尝试了各种设置,例如ENV ARTIFACTS_KEYRING_NONINTERACTIVE_MODE true等,但均无济于事。

是否可以在非 Azure docker 容器中 pip 安装 Azure 包。如果是这样,怎么办?任何帮助表示赞赏。

PS - 我已经搜索过网络,但似乎无法获得如何实现上述目标的明确答案。谢谢

最佳答案

找到了一个解决方案(可能有点hacky)..在Azure中生成 token https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page并复制 token 。

并在 Dockerfile 中确保 pip install keyring artifacts-keyring 不存在。

然后简单

RUN  pip install --index-url=https://<azure_pat>@pkgs.dev.azure.com/Org/Project/_packaging/Feed/pypi/simple/ Package

其中 是复制的 token 。

关于python - 在本地(非 Azure)docker 实例中使用来自 Azure feed 的 python 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67503507/

相关文章:

python - 将元组列表更改为字典(pythonic 方式)

python - 判断一个整数是否是循环素数

node.js - 如何在具有 yarn 工作空间的 monorepo 中从 nodejs 项目构建 docker 镜像

docker - 如何通过 app.json 在 Heroku 上运行 Docker Hub 容器?

python - 来自factoryboy的自引用SQLAlchemy模型的属性错误

python - 使用OpenCV 2.4.9检测矩形

php - 将 Laravel 部署到 Azure

Azure 应用服务 - 运行自定义可执行文件

ajax - AJAX 和 Azure 反向代理的 CORS 问题

docker - Com.github.dockerjava.api.exception.DockerClientException:证书路径(DOCKER_CERT_PATH) ‘/root/.docker/certs’不存在一般讨论