无DNS及外网HTTP访问权限的Linux系统如何使用pip安装包?
内网M1机器通过外网M2使用pip安装Python包的解决方案
非root权限优先方案
方案1:SSH端口转发+代理
利用SSH端口转发将M1的请求通过M2中转到互联网,无需修改系统配置:
- 在M1上建立SSH端口转发,把本地8080端口绑定到M2的本地端口:
(替换ssh -L 8080:localhost:8080 m2_username@m2_ip_addressm2_username为你在M2的用户名,m2_ip_address为M2的可访问IP)- 在M2上启动轻量HTTP代理:
如果M2没装代理工具,先通过系统包管理器安装(比如Debian/Ubuntu用apt install privoxy,RHEL/CentOS用yum install privoxy),确认配置文件/etc/privoxy/config中存在listen-address 127.0.0.1:8080,然后启动服务:
若不想装系统包,也可用Python的sudo systemctl start privoxyproxy.py:pip install proxy.py proxy --port 8080- 在M2上启动轻量HTTP代理:
- 在M1上通过代理执行pip安装:
要永久生效,可在M1用户目录下创建pip install --proxy http://127.0.0.1:8080 your_target_package~/.pip/pip.conf(Python3.4+可放~/.config/pip/pip.conf),写入:[global] proxy = http://127.0.0.1:8080
方案2:离线下载后传输安装
适合需要批量安装或网络不稳定的场景:
- 在M2上下载目标包及所有依赖到本地目录:
pip download -d ~/pip_offline_pkgs your_target_package- 从M1通过SCP拉取下载好的包目录:
scp -r m2_username@m2_ip_address:~/pip_offline_pkgs ~/- 在M1上从本地目录安装:
pip install --no-index --find-links=~/pip_offline_pkgs your_target_package
root权限补充方案
如果有root权限,可配置全局代理简化操作:
- 在M1的
/etc/environment中添加代理变量:
执行http_proxy=http://127.0.0.1:8080 https_proxy=http://127.0.0.1:8080source /etc/environment生效后,所有包括pip在内的网络请求都会自动走代理。
注意事项
- 尽量保持两台机器的pip版本一致,避免依赖包版本兼容问题;
- 因M1无DNS配置,通过代理时DNS解析由M2完成,无需在M1额外配置
hosts; - 若使用旧版pip,可能需用
--proxy=http://xxx的格式(无空格)。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

