如何通过Python文件在Databricks安装Azure Artifacts的Python包
能否直接使用
pip install命令安装? 可以。不需要走原有Azure Pipeline上传whl到Databricks工作区的流程,但Azure DevOps Artifacts属于私有制品仓库,直接执行无认证参数的pip install会因为权限校验失败无法拉取包,只要配置好对应源的认证信息,就能和安装公共PyPI包一样直接拉取指定版本的自有包。
DBFS存储的Python文件实现安装的具体步骤
- 提前准备Azure DevOps认证凭据
生成具备Artifacts读取权限的Azure DevOps个人访问令牌(PAT),令牌过期时间根据业务需求设置即可。禁止将PAT明文硬编码在Python文件中,建议提前将PAT存储到Databricks Secrets中,调用时通过dbutils.secrets.get读取,避免凭据泄露。 - 在Python代码中调用pip完成安装
在DBFS存放的Python文件开头,通过subprocess调用当前Python环境的pip,传入带认证信息的私有源地址安装指定版本包即可,示例代码如下:import sys import subprocess # 从Databricks Secrets读取配置,替换成你自己的scope和key名 AZDO_PAT = dbutils.secrets.get(scope="common-secrets", key="azdo-feed-pat") AZDO_ORG = "替换成你的Azure DevOps组织名" AZDO_FEED = "替换成你的Artifacts源名称" # 这里指定要安装的包名+精确版本,比如my-utils==1.2.3 TARGET_PACKAGE = "替换成你的包名==指定版本号" # 拼接带认证的私有源地址 private_pypi_source = f"https://{AZDO_ORG}:{AZDO_PAT}@pkgs.dev.azure.com/{AZDO_ORG}/_packaging/{AZDO_FEED}/pypi/simple/" # 执行安装 subprocess.check_call( [ sys.executable, "-m", "pip", "install", TARGET_PACKAGE, "--index-url", private_pypi_source ] ) # 安装完成后即可正常导入包 # import 你的包名如果你的私有包依赖公共PyPI上的第三方包,不需要额外配置,pip会自动从公共源拉取缺失的依赖;如果要求所有包必须从私有源拉取,在安装参数中追加
--no-extra-index-url即可。 - 可选:集群全局预配置(适合高频使用场景)
如果该私有包需要在集群上所有任务中使用,不需要每次在Python文件里写安装逻辑,可以给集群配置DBFS存储的初始化脚本,提前写入pip全局配置,后续所有任务直接执行pip install 包名==版本即可,无需重复传入认证和源地址。初始化脚本示例:#!/bin/bash # 写入pip全局配置 mkdir -p /root/.pip cat > /root/.pip/pip.conf << EOF [global] index-url = https://<你的Azure DevOps组织名>:<提前注入的PAT>@pkgs.dev.azure.com/<你的组织名>/_packaging/<你的源名>/pypi/simple/ extra-index-url = https://pypi.org/simple/ EOF
注意事项
- 安装命令必须放在业务逻辑最前,待安装完成后再导入对应包,否则会报模块不存在的错误。
- 如果是单节点作业集群,安装完包直接使用即可;如果是多节点工作集群,需要确保所有节点都能访问到Azure DevOps的源地址,网络不通的场景下还是需要提前上传whl文件。
- PAT权限只需要给Artifacts的读取权限即可,不要给多余权限,降低安全风险。
内容的提问来源于stack exchange,提问作者Minura Punchihewa
相关产品推荐
相关产品推荐

