创建 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?的主要内容,如果未能解决你的问题,请参考以下文章