当现有配置脚本需要通过代理运行 pip 时,请把 pip 作为 subprocess 启动。pip 内部的 Python 函数并不是受支持的应用 API。

import subprocess
import sys

subprocess.run([
    sys.executable,
    '-m', 'pip', 'install',
    '--proxy', 'http://proxy.example:8080',
    'example-package',
], check=True)

使用预期的软件包和代理端点。对于允许经公共中转下载的公共软件包,HTTP 代理列表 可为 HTTP 代理参数提供候选。sys.executable 会选择正在运行脚本的 Python 解释器,从而避免误调用 PATH 中另一套安装的 pip。

每个参数各占一个列表元素。不需要 shell,代理 URL 也不需要额外嵌入一对 shell 引号。安装失败时 check=True 会抛出 CalledProcessError,让配置流程能够处理该失败。

在这个 pip 调用或其 subprocess 环境中配置下载路由。父程序其他位置配置的 Requests 会话不会配置 pip 的独立进程。

安装完成后,继续应用正常的环境生命周期。安装到已在运行的解释器并不保证其当前导入、缓存或路径会立即反映新软件包。

相关文章