在阿里云上ubuntu2404,已经有python环境了,但是运行
pip3 install proxy.py
会提示

你正在 Debian/Ubuntu 服务器 安装 proxy.py,系统启用了 PEP 668 保护机制 ,不允许 pip 直接写入系统包环境,因此出现:
externally-managed-environment
解决方案有 3种,推荐第①或第②。
✅ 方案1:创建虚拟环境(最安全 & 官方推荐)
apt update
apt install python3-venv -y # 若未安装虚拟环境工具
创建运行目录并建 venv:
mkdir /root/proxyserver
cd /root/proxyserver
python3 -m venv venv
source venv/bin/activate
环境切换成功提示类似:
(venv) root@server:~#
安装代理:
pip install proxy.py
启动带账号密码代理:
proxy --hostname 0.0.0.0 --port 7890 --basic-auth admin:123456
👉 已可从外部连接,访问形式:
http://admin:123456@服务器IP:7890
用python代码实现
import subprocess
cmd = [
"proxy",
"--hostname", "0.0.0.0",
"--port", "7890",
"--basic-auth", "admin:123456"
]
subprocess.call(cmd)
在另外python中调用
proxy_user = "admin"
proxy_pass = "123456"
proxy_host = "服务器地址"
proxy_port = "7890"
proxies = {
"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
"https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
}
r = requests.get(URL, params=params, headers=headers, timeout=10, proxies=proxies)
r.raise_for_status()
return r.json()
curl -x http://admin:123456@服务器IP:7890 https://www.baidu.com -I
bash命令行
export http_proxy="http://admin:123456@服务器IP:7890"
export https_proxy="http://admin:123456@服务器IP:7890"
wget https://www.baidu.com -O -
cmd窗口
set http_proxy="http://admin:123456@服务器IP:7890"
set https_proxy="http://admin:123456@服务器IP:7890"
wget https://www.baidu.com -O -
另外如果密码因为 URL 中 @ 和 & 是特殊符号,必须进行 URL 编码,否则 wget 会把它们当作分隔参数,导致认证失败或解析错误。
| 字符 | URL编码 |
|---|---|
@ |
%40 |
& |
%26 |
你这串密码里包含多个需要 URL 编码 的特殊字符:
原密码:
aa@123&^a:a
🔍 字符编码规则
| 字符 | 用途 | 是否必须编码 | 编码结果 |
|---|---|---|---|
@ |
分隔用户与主机 | 必须 | %40 |
& |
参数连接符 | 必须 | %26 |
^ |
Windows CMD 特殊符号 | 建议编码 | %5E |
: |
分隔用户与密码 | 必须 | %3A |
✔ 正确 URL 编码后的密码:
aa%40123%26%5Ea%3Aa
👉 完整代理 URL 写法示例
假设:
-
用户名:
admin -
密码:
aa@123&^a:a -
服务器:
服务器地址:7890
则应写为:
http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890
🚀 wget 一行测试示例(Windows CMD 可用)
wget --execute="http_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" ^
--execute="https_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" ^
https://www.baidu.com -O -
或仅测试连通性:
wget --spider --execute="https_proxy=http://admin:aa%40123%26%5Ea%3Aa@服务器地址:7890" https://www.baidu.com