如何在 pip 中使用代理

使用 pip 配置代理,以绕过网络限制、提升安全性并简化软件包管理。
3 min read
如何在 pip 中使用代理

在本文中,您将学习如何在受限网络中配置并使用代理,从而实现无缝的软件包管理。

公共代理与私有代理之间的差异

选择代理时,需要确定其是公共代理还是私有代理,这一点非常重要。

公共代理

公共代理对所有人开放使用,通常不需要身份验证。尽管它能快速提供一个 IP 地址,但也存在不少缺点——速度慢、连接不稳定、可能会被 IP 封禁。由于这些代理免费且广泛可用,通常缺少代理轮换、缓存和访问控制等重要功能,因此并不适用于生产环境。

公共代理 URL 可能类似于:https://proxyserver:port

私有代理

私有代理需要身份验证,提供更高的安全性、稳定性和高级功能(但通常需要付费)。它们为您提供安全、快速且可靠的专用 IP 地址连接,并且支持代理身份验证和轮换等功能。

常见的做法是通过在代理 URL 前添加用户名和密码进行身份验证,例如:https://username:password@proxyserver:port

在 pip 中使用代理

要在 pip 中使用代理,首先需要获取代理的相关信息。下面的示例使用了一个公共代理,包含如下信息:

  • 代理服务的代理地址
  • 代理服务使用的端口

这个名为 proxy-list 的仓库 提供了每日测试的公共代理地址,可用于测试,但不建议在生产环境中使用。

proxy-list 仓库中,通过查看 proxy-list-status.txt 文件来找到可用的公共代理。可以依据该文件中带有 success 标记的条目来确定该代理正常工作:

选择公共代理

在本教程中,使用 45.185.162.203:999 作为公共代理地址。这意味着代理服务器地址是 http://45.185.162.203:999

通过命令行为 pip 配置代理

为 pip 配置代理的最快方法是直接在 pip install 命令中使用 --proxy 来传入代理地址。

使用公共代理地址,测试您对该代理和相关包的访问,请使用以下命令:

# Public Proxy
pip install boto3 --proxy http://45.185.162.203:999

这种方法可以让您快速测试并验证代理,然后再进行永久性的代理配置。如果要发布 pip 包,那么通过不同 IP 验证其可用性也十分有帮助。

在 pip 配置文件中配置代理

若想为 pip 永久配置代理,可以通过编辑 pip 配置文件,这是一种简单明了的解决方案。配置文件所在的位置取决于您的操作系统,通常包括以下几种:

  • Global(全局): 系统范围的配置文件,所有用户共享。
  • User(用户): 针对当前用户执行 pip 进程时使用的配置文件。
  • Site(环境): 针对 Python 虚拟环境使用的配置文件。

这些配置文件在不同系统中的位置如下:

Linux/macOS

在 Linux 系统中,pip 配置文件命名为 pip.conf,可以在下列位置找到:

  • Global(全局):
    • Debian 系统:/etc 目录中编辑或创建 pip.conf
    • macOS 系统:/Library/Application Support/pip/pip.conf 位置进行编辑或创建。
  • User(用户):
    • Debian 系统:~/pip/pip.conf 位置编辑或创建。
    • macOS 系统:~/.config/pip/pip.conf 位置编辑或创建。
  • Site(环境): 在加载 Python 虚拟环境后,可以在 $VIRTUAL_ENV/pip.conf 中找到对应配置文件。

Windows

在 Windows 系统中,该文件名为 pip.ini,存放位置如下:

  • Global(全局): 可以在 C:\ProgramData\pip\pip.ini 文件中进行编辑或创建。注意,此文件在默认情况下是被隐藏的,但可进行写操作。
  • User(用户): 可以在 %APPDATA%\pip\ 目录下编辑或创建 pip.ini
  • Site(环境): 在加载 Python 虚拟环境后,可以在 %VIRTUAL_ENV%\pip.ini 中编辑或创建配置文件。

配置文件内容

在本示例中,我们将使用 Python 虚拟环境下的 pip 配置文件。在已激活的虚拟环境里,编辑 Debian 系统中的 $VIRTUAL_ENV/pip.conf 或 Windows 系统中的 %VIRTUAL_ENV%\pip.ini

在配置文件中,需要将 proxy 键更新为目标 HTTP 或 HTTPS 代理:

[global]
proxy = http://45.185.162.203:999

保存文件后,您在该虚拟环境中使用任何 pip 命令时都会自动通过该代理,无需再使用之前提到的 --proxy 参数:

(venv) $ pip install boto3

更多关于 pip 配置文件支持的选项,可以参阅 pip 官方文档

通过环境变量配置 pip 代理

在系统层面上配置环境变量后,pip 及其他所有 HTTP 请求都会使用代理。具体做法是设置 HTTP_PROXYHTTPS_PROXY 环境变量,许多软件(包括 pip)会将这些变量视为默认代理。

Linux/macOS

如果您使用 Linux,可以修改 /etc/environment 文件;如果是 macOS 用户,可以修改位于用户主目录的 .zshrc 文件,然后加入如下条目:

HTTP_PROXY=https://proxyserver:port
HTTPS_PROXY=https://proxyserver:port

当您重新启动终端或系统后,这些环境变量就会生效。

Windows

在 Windows 系统中,可以在命令提示符(cmd)下运行以下命令来设置环境变量:

setx HTTP_PROXY "https://proxyserver:port" /M
setx HTTPS_PROXY "https://proxyserver:port" /M

重新启动命令提示符后,即可使这些配置生效。

测试配置

当您在系统层面通过 pip 配置文件或环境变量启用了代理后,应当测试代理确实能够正常连接并通过网络获取数据。

Linux/macOS

在 Linux/macOS 上,可以使用如下命令进行测试:

$ python -m venv venv
$ source venve/scripts/activate

# for pip config file or environment variables
(venv) $ pip install requests

如果想在这种配置之外针对某个安装命令使用特定代理,可以使用 CLI 命令来覆盖:

# pip cli flag
(venv) $ pip install requests --proxy https://proxyserver:port

在这里,务必用您自己的代理信息替换 https://proxyserver:port

Windows

在 Windows 上,可以使用以下命令:

> python -m venv venv
> .\venv\Scripts\Activate.bat
(venv) > pip install requests

同样,您也可以随时使用 pip 的 CLI 命令覆盖这些设置:

# pip cli flag
(venv) $ pip install requests --proxy https://proxyserver:port

排查 pip 代理问题

当您使用 HTTP 或 HTTPS 代理 并在 pip 中进行连接时,尤其在使用私有代理或 HTTPS 代理(这类代理功能更完善)时,可能会遇到以下常见问题。

身份验证问题

如果是身份验证问题,通常会出现 407 代理身份验证要求 错误,表示该代理需要用户名和密码,但您可能没有正确提供凭证。

证书问题

当使用 HTTPS 代理时,您可能会看到 pip 报 Certificate verify failed 错误,表示代理服务器提供的证书有问题。

如果您的私有代理使用了自签名证书,pip 无法从权威 CA 处验证证书时就会抛出此错误。对此,您可以在连接特定域名时使用 --trusted-host 选项来忽略自签名证书错误。

在 pip 中使用轮换代理

轮换代理通过自动更换 IP 地址来避免 IP 封禁,并模拟多个用户访问,从而规避各种限制。

实现方法可以是根据代理列表随机选取代理。下面提供了一个简单的 Bash 脚本,通过轮换公共代理来安装 pip 包。

创建名为 rotate-proxies.sh 的脚本:

proxy_list=(
  'http://45.185.162.203:999'
  'http://177.23.176.58:8080'
  'http://83.143.24.66:80'
)

pip_packages=(
  'requests'
  'numpy'
  'pandas'
)

# Loop through packages and install them
for package in "${pip_packages[@]}"
do
  # Randomly select a proxy from the list
  proxy=${proxy_list[$RANDOM % ${#proxy_list[@]}]}
  echo -e  "\nInstalling $package with proxy $proxy"
  pip install --proxy $proxy $package
done

创建完成后,执行该脚本即可通过随机切换代理下载并安装 pip 包。以下是脚本输出的示例内容:

$ ./rotate-proxies.sh 

Installing requests with proxy http://177.23.176.58:8080
Collecting requests
  Downloading requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)

….

Downloading urllib3-2.3.0-py3-none-any.whl (128 kB)
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2025.1.31 charset-normalizer-3.4.1 idna-3.10 requests-2.32.3 urllib3-2.3.0

Installing six with proxy http://45.185.162.203:999
Collecting numpy
 Downloading numpy-2.2.2-cp313-cp313-macosx_14_0_x86_64.whl.metadata (62 kB)

…

Installing collected packages: numpy
Successfully installed numpy-2.2.2

Installing pandas with proxy http://83.143.24.66:80
Collecting pandas
  Downloading pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl.metadata (89 kB)

….

Installing collected packages: pytz, tzdata, six, python-dateutil, pandas
Successfully installed pandas-2.2.3 python-dateutil-2.9.0.post0 pytz-2025.1 six-1.17.0 tzdata-2025.1

在 pip 中使用代理的好处

使用代理可以帮助开发者绕过网络限制、访问被屏蔽的资源,并加快下载速度。私有代理一般可以提供缓存、快速连接和更高的安全性,能够隐藏真实 IP。

与 VPN 相比,代理是一种更轻量的解决方案。VPN 会对所有网络流量进行加密,提供更全面的隐私保护,但也会增加延迟,从而减慢包的安装速度。而代理只会针对指定流量进行转发,更加高效。

常见错误与最佳实践

在 pip 中使用代理时,需要对一些常见错误保持警惕,否则可能带来安全风险。例如,代理 URL 填写错误或协议(HTTP/HTTPS)字段缺失都可能导致无法连接到包仓库。

另一个需要注意的安全风险是将代理凭证(如用户名和密码)硬编码在源码、脚本或 CI/CD 流程定义中。如果这些代码被重新分发,可能导致代理被滥用。如果凭证泄露,不仅可能带来额外费用,还可能被不法分子利用。

为避免这些情况,应将代理凭证保存在环境变量或加密后的配置文件中,而不是直接写在代码里。此外,必须在正式使用 pip 前先测试代理连接情况,减少运行时错误。可使用 curlping 等工具来验证代理性能,确保其正常工作,从而获得更顺畅的包管理体验。

使用 Bright Data 代理

如果您正在寻找高质量且功能丰富的代理提供商,可以考虑 Bright Data。它提供各种类型的 IP 地址,包括住宅、数据中心和移动设备,并且具备专门针对数据采集和网络爬虫的高级工具,比如轮换代理和 Web Unlocker API

Bright Data 能让您轻松为项目创建代理。下面以创建一个私有的住宅代理为例,来为 pip 提供不同的 IP 地址。

首先,注册一个免费的 Bright Data 账户,然后进入用户控制台

在侧边菜单中,点击 Proxies & Scraping

Bright Data 代理

表单加载后,您可以配置一个新的住宅代理。如果使用默认设置,您将获得一个多个 Bright Data 用户共享的 IP:

创建住宅代理

如果您需要访问特定地区的资源,可以指定目标国家。

代理创建完成后,系统会跳转到一个管理面板,显示该代理的地址端点和认证方式。记录用户名、密码和服务器信息:

代理管理面板

根据这些信息,您可以使用 --proxy 参数来测试:

$ pip install pandas \
    --trusted-host pypi.org \
    --trusted-host files.pythonhosted.org \
    --proxy https://username:[email protected]:33335

由于 Bright Data 代理使用了自签名证书,您可以使用 trusted-host 参数将 pypi.orgfiles.pythonhosted.org 视为可信任域名。

总结

在 pip 中使用代理有助于提高匿名性和可控性,帮助您绕过 IP 限制和地理屏蔽。根据需求,您可以选择公共代理或私有代理。

私有代理 能带来许多优势,例如 IP 轮换、缓存加速、更快的速度和更高的稳定性,具体费用取决于 IP 资源的供应情况和地理位置。

为 pip 配置代理非常简单,您可以通过命令行参数、pip 配置文件或环境变量等多种方式来实现。不过,公共代理功能有限,正如前文所述,不适用于大规模或生产环境。若需要更可靠的方案,Bright Data 提供住宅和 数据中心 IP 选项,连接快速稳定,并拥有适用于网络爬虫和数据采集的高级功能。现在就注册免费账号开始体验吧!