Python 指南 · 1 分钟阅读

在代理后使用pip和conda

在防火墙后安装 Python 包只需一个 HTTP 代理设置,pip 中有三种方式,conda 中有两种。以下是每种方式,以及用于 TLS 检查企业代理的 trusted-host 技巧。

一个代理,多个设置地点

pip 和 conda 都通过 HTTPS 获取数据,因此都需要在 3128 端口上使用经过身份验证的 s4m HTTP 端点,认证信息为 USER:PASS。pip 提供三种方式来设置:单个命令的 --proxy 标志,持久化的 proxy 行在 pip.conf 中,以及 PIP_PROXY 环境变量。pip 还支持标准的 http_proxy / https_proxy 变量,因此在 shell 级别的导出通常可以解决问题,而无需更改 pip 自身的配置。

conda has its own config file. Set proxy_servers for http and https with conda config, which writes to ~/.condarc; conda also reads the environment variables. With s4m you point both tools at http://USER:PASS@proxy.s4m.online:3128. See the proxy page, the sibling npm/yarn guide, and the shared environment-variable guide for how these variables cross tools.

pip 和 conda,所有方法

pip 的标志、配置文件和环境变量;condarc 用于 conda;trusted-host 用于 TLS 检查代理。替换 USER:PASS。

bash
# --- pip: single command ---
pip install --proxy http://USER:PASS@proxy.s4m.online:3128 requests

# --- pip: environment variables (whole session) ---
export https_proxy="http://USER:PASS@proxy.s4m.online:3128"
export http_proxy="http://USER:PASS@proxy.s4m.online:3128"
pip install requests

# --- pip: persistent config (~/.config/pip/pip.conf, or pip.ini on Windows) ---
cat > ~/.config/pip/pip.conf <<'CFG'
[global]
proxy = http://USER:PASS@proxy.s4m.online:3128
timeout = 30
CFG

# --- conda: writes to ~/.condarc ---
conda config --set proxy_servers.http  http://USER:PASS@proxy.s4m.online:3128
conda config --set proxy_servers.https http://USER:PASS@proxy.s4m.online:3128
conda install numpy

# --- TLS-inspecting corporate proxy? mark hosts trusted for pip ---
pip install --proxy http://USER:PASS@proxy.s4m.online:3128 \
  --trusted-host pypi.org --trusted-host files.pythonhosted.org requests

选择正确的方法

设置需要多永久?

一次安装

使用 pip install --proxy http://USER:PASS@proxy.s4m.online:3128 。没有任何持久性——在共享或临时机器上理想。

整个会话

导出http_proxy和https_proxy。在该shell中,pip和conda(以及大多数CLI工具)使用出口,直到您取消设置它们。

永久每用户

将代理写入pip.conf和~/.condarc,以便每次安装都能自动路由,无需重复标志。

TLS拦截

如果企业代理重新签署TLS,pip可能会拒绝证书。为pypi.org和files.pythonhosted.org添加--trusted-host,或安装代理的CA。

TLS拦截、认证和诚实

在代理后最令人困惑的 pip 失败不是超时,而是一个SSL 证书错误。当企业代理拦截并重新签名 HTTPS 时,pip 会看到一个不受信任的证书并拒绝。正确的解决方法是将代理的根 CA 安装到您的信任存储中;快速修复是--trusted-host pypi.org --trusted-host files.pythonhosted.org。s4m 自己的代理并不拦截 TLS,因此您不会在我们的端点遇到这个问题——它只转发您的加密流量。

s4m 的 HTTP 代理是一个经过身份验证的数据中心端点,按需计费——为必须从受控网络访问 PyPI 和 conda 通道的 CI 镜像和开发者盒子提供干净的出口。它不是住宅代理,也不是软件包镜像。对您的密码中的特殊字符进行编码(@变为%40),并为内部软件包索引设置no_proxy。一个407意味着凭据错误——请参阅407 指南。当 CI 需要一个白名单出口时,添加一个专用个人 IP;使用工具验证任何端点。

FAQ

问题,已解答

我该如何为单个pip安装设置代理?

将 --proxy http://USER:PASS@proxy.s4m.online:3128 传递给 pip install 命令。没有任何持久化,这在共享机器上很方便;要进行永久设置,请使用 pip.conf 或 http_proxy 环境变量。

为什么在代理后pip会因SSL证书错误而失败?

企业代理可能会拦截并重新签名TLS,因此pip看到一个不受信任的证书。安装代理的根CA,或使用--trusted-host pypi.org --trusted-host files.pythonhosted.org。s4m不拦截TLS,因此我们的端点避免了这个问题。

我该如何配置conda以使用代理?

运行 conda config --set proxy_servers.http 和 proxy_servers.https 到你的代理 URL;它会写入 ~/.condarc。conda 也会尊重 http_proxy 和 https_proxy 环境变量。

pip 和 conda 需要 SOCKS5 或 HTTP 端点吗?

端口3128上的HTTP端点。两个工具通过HTTP CONNECT代理通过HTTPS获取包,因此将它们指向http://USER:PASS@proxy.s4m.online:3128.。

解除对您的 Python 安装的阻止

通过 proxy.s4m.online:3128 的认证 HTTP 端点路由 pip 和 conda。按需计费,无 TLS 拦截,CI 白名单可用专用 IP。

人们通过搜索找到此页面

此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。