创建 azureml 环境时如何指定 pip extra-index-url?

Posted

技术标签:

【中文标题】创建 azureml 环境时如何指定 pip extra-index-url?【英文标题】:How to specify pip extra-index-url when creating an azureml environment? 【发布时间】:2020-02-27 17:55:24 【问题描述】:

当 AzureML 创建 Python 环境并运行 pip install 时,我希望它使用额外的非公共索引。有没有办法做到这一点?

我在 AzureML 计算上运行我的 python 脚本。该环境是根据docs 的 pip 要求创建的。该脚本现在引用私有索引中的包。要在本地或构建机器上运行脚本,我只需在运行pip install -c ... 之前指定带有索引凭据的PIP_EXTRA_INDEX_URL 环境变量。如何在 AzureML 环境准备过程中启用相同的功能?

AzureML 文档suggest 我直接提供轮文件而不是包名称。这意味着我必须手动完成构建 pip 的所有工作:识别其他要求中的私有包,选择正确的版本和平台,下载它们。

理想情况下,我只需要这样写:

myenv = Environment.from_pip_requirements(
    name = "myenv",
    file_path = "path-to-pip-requirements-file",
    extra-index-url = ["url1", "url2"])

【问题讨论】:

【参考方案1】:

如果你有你的需求文件,你可以在那里指定额外的索引 url re.txt

--extra-index-url foo --extra-index-url 栏 package_a 包_b package_x

更多选项请点击这里https://pip.pypa.io/en/stable/user_guide/#requirements-files

yaml 文件也是如此

【讨论】:

谢谢,尽管此解决方案最终可能会导致凭据被签入存储库,这是一种不好的做法。 我明白了,你可以试试这个docs.microsoft.com/en-us/python/api/azureml-core/…【参考方案2】:

看来,SDK 中有一个set_pip_option method,它用一个额外的索引 URL 来解决问题,例如

from azureml.core.environment import CondaDependencies
dep = CondaDependencies.create(pip_packages=["pyyaml", "param"])
dep.set_pip_option("--extra-index-url https://user:password@extra.index/url")

不幸的是,对该函数的第二次调用将第一个值替换为新值。对于--extra-index-url 选项,应更改此逻辑以支持搜索超过 2 个索引(一个公共,一个私有)。

【讨论】:

请注意,您可以将列表传递给 --extra-index-url,如下所示:dep.set_pip_option("--extra-index-url https://user:password@extra.index/url1,https://user:password@extra.index/url2") 不幸的是,这不起作用。当来自 cmdline/requirements 与来自 config/env 时,Pip(从 v19.3.1 开始)对此选项的处理方式不同。在配置文件或 PIP_EXTRA_INDEX_URL 中,您可以提供以空格分隔的 url 列表。在 cmdline 或需求文件中,每个选项都是一个附加到额外 url 列表的值。特别是,pip 会将上面的示例视为一个额外的 url,中间有逗号,显然会失败。 这个用户名密码是你的 azure devops 用户名和个人访问令牌。

以上是关于创建 azureml 环境时如何指定 pip extra-index-url?的主要内容,如果未能解决你的问题,请参考以下文章

linux2

在 AzureML 中部署模型时如何将参数传递给评分文件

Python2 与 Python3的pip安装指定

Pycharm创建的virtualenv环境缺失pip.exe的问题(Windows系统)

Python pip 虚拟环境使用

pip 安装库时临时指定豆瓣源