开发与 AI · Clash 技术博客

pip、Conda 下载超时怎么办?Python 环境使用 Clash 代理的正确方法

pip、Conda 与 git+https 的代理来源不同。用新终端里的临时代理测试原请求,结合解析、连接或证书错误找到问题;测试有效后,按实际使用的工具保存设置并保留清理方法。

  • pip
  • Conda
  • Python
  • 下载超时
本文目录

Python 环境里的下载不一定跟随浏览器代理,反复添加永久设置还可能让工具继续连接旧端口。先在一个新终端测试原来的命令,确认请求是否进入客户端,再决定给哪个工具保存设置;下载错误和证书错误分开处理,结束后也能清理测试留下的代理。

pip、Conda 与 Git 下载失败,代理配置分别在哪里?

记下 pip、Conda 或 Git 的失败命令和域名,再对照下表查配置。用当前终端的临时代理重试原请求,在 Clash 中看到连接记录且下载成功后再保存长期设置,并保留撤销命令;浏览器能打开 PyPI,不能替代这些检查。

失败命令与代理配置入口

命令或错误真正的下载器查看配置
python -m pip installpip / Python HTTP 库pip config debug、环境变量、--proxy
conda install / createConda命令:conda config --show-sources;文件:~/.condarc
git+https://...Gitgit config --show-origin --get-regexp http.*proxy
编译阶段再下载资源包自己的构建脚本详细日志中的真实 URL

当前终端的临时代理测试,结束后可直接撤销

端口换成 Clash 实际 mixed-port。测试时打开客户端连接页;PyPI 或 channel 请求出现且命中预期节点,才证明命令进入代理。浏览器能访问 pypi.org 不能替代这一步。

下面的示例只适用于没有旧代理设置的临时终端。先检查大小写不同的 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 和 ALL_PROXY,再用后文的 pip config debug 与 conda config --show-sources 查看工具配置来源。

任何来源已有代理时,先保存原值和配置位置,按后文分别处理,不直接运行下面的覆盖与删除命令。公司规定的代理保持原样;新开窗口也可能继承旧变量,不能只凭“新窗口”认定没有配置。

确认没有旧代理来源后再运行示例,结束时只删除本次新增的变量并关闭临时窗口。原窗口和持久配置不随之改变;若曾手动更改已有值,要按记录恢复,不能靠 unset 或删除变量代替恢复。

macOS / Linux 当前终端,CLASH_PORT 按实际 mixed-port 修改
CLASH_PORT=7890
export HTTP_PROXY="http://127.0.0.1:$CLASH_PORT"
export HTTPS_PROXY="http://127.0.0.1:$CLASH_PORT"
export NO_PROXY=localhost,127.0.0.1,::1

python -m pip install --dry-run --ignore-installed --no-cache-dir packaging
conda search python

unset HTTP_PROXY HTTPS_PROXY NO_PROXY
Windows PowerShell 当前窗口,7890 按实际 mixed-port 修改
$ClashPort = 7890
$env:HTTP_PROXY = "http://127.0.0.1:$ClashPort"
$env:HTTPS_PROXY = "http://127.0.0.1:$ClashPort"
$env:NO_PROXY = "localhost,127.0.0.1,::1"

py -m pip install --dry-run --ignore-installed --no-cache-dir packaging

Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:NO_PROXY

单次 pip 请求、用户配置与虚拟环境配置如何选择?

查看来源、临时使用和撤销
python -m pip config debug
python -m pip config list -v

# 单次命令,官方支持 scheme://[user:password@]host:port
python -m pip install --proxy http://127.0.0.1:7890 requests

# 若曾写入用户配置,查看后再删除
python -m pip config --user unset global.proxy
只给当前虚拟环境使用,并能单独撤销
# 先激活项目自己的 venv,再执行
python -m pip config --site set global.proxy http://127.0.0.1:7890
python -m pip config --site list

# 项目不再需要代理时
python -m pip config --site unset global.proxy

pip 的配置可能来自全局、用户、虚拟环境和 PIP_CONFIG_FILE。config debug 会列出文件路径,不要只编辑第一份找到的 pip.conf。

--site 会写进当前虚拟环境,适合本机项目单独使用。但 .venv 必须留在 .gitignore,requirements.txt 与 pyproject.toml 仍不应写入个人代理。

如果使用自定义 index-url,也要把超时发生在哪个域名写清。索引页面正常、wheel 文件下载失败,可能是文件 CDN 或证书路径不同。

Conda 的 proxy_servers 放在 .condarc,并检查 channel

~/.condarc 示例
proxy_servers:
  http: http://127.0.0.1:7890
  https: http://127.0.0.1:7890

ssl_verify: true
查来源与移除
conda config --show-sources
conda config --show proxy_servers ssl_verify channels

# 不再需要时删除整个代理映射
conda config --remove-key proxy_servers

Conda 先下载 channel 的 repodata,再取具体包。某个第三方 channel 失效时,代理设置完全正确也会 404 或超时;根据详细输出确认最后访问的 channel,不要把 defaults、conda-forge 和私有镜像一起重写。

CERTIFICATE_VERIFY_FAILED 不要用 trusted-host 或 ssl_verify: false 糊过去

检查系统时间、索引域名和是否存在企业 HTTPS 检查。组织提供 CA 文件时,pip 可以使用 --cert 或 PIP_CERT,Conda 可以把 ssl_verify 指向 CA 文件。

Conda 23.9+ 且 Python 3.10+ 还支持 ssl_verify: truststore,使用操作系统证书库。

ssl_verify: false 会让以后所有 Conda 请求跳过证书校验,不适合作为长期配置。家用网络突然出现未知 CA,应检查安全软件或代理节点,而不是安装网页推荐的根证书。

受管设备示例,路径由管理员提供
# pip 单次命令
python -m pip install --cert /path/to/company-ca.pem requests

# .condarc 二选一
ssl_verify: /path/to/company-ca.pem
# ssl_verify: truststore

依赖写着 git+https 时,回到 Git 检查

pip 遇到 git+https 依赖会调用 Git。先在项目外运行 git ls-remote 对应仓库,再用 git config --show-origin 找旧代理;需要认证的仓库通过凭据管理器或 SSH key,不把 token 写进 requirements。

PEP 517 构建隔离还可能创建临时环境并下载 build backend。加 -vvv 保存详细日志,看到真实失败 URL 后再判断是 pip、Git 还是包的构建脚本。

可直接运行的公开示例;再换成报错的仓库和包名
REPO_URL='https://github.com/pallets/flask.git'
PACKAGE_NAME='packaging'

git config --show-origin --get-regexp 'http..*.proxy|http.proxy' || true
git ls-remote "$REPO_URL"
python -m pip install -vvv "$PACKAGE_NAME"

撤销旧代理后,pip、Conda 和 Git 能否正常下载?

结束条件

  • pip config debug 不再显示旧 proxy
  • conda config --show-sources 中没有无效 proxy_servers
  • 新终端的 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 均符合预期
  • pip 小包、Conda repodata 与 git+https 依赖分别测试
  • Clash 关闭后,未设置代理的 Python 命令不会继续指向 127.0.0.1 旧端口
  • 证书验证保持开启

参考资料