0

我既不能通过 pip 命令安装 python 包,也不能从我的网络子网加入 url http://pypi.python.org/但是当我连接到具有相同计算机但不同 IP 和子网的另一个网络时,我可以安装包和加入网址。当我进行 pip 安装时,我收到错误消息“无法获取索引基础 URL http://pypi.python.org/simple/ ”。我认为这与 IP-ban 问题有关,因为它以前是有效的。以前有人有过这样的经历吗?

4

1 回答 1

1

解决方案?:

user@host:~$export HTTP_PROXY="$http_proxy"

简短回答:小写 $http_proxy 必须是大写 $HTTP_PROXY

长答案:我也遇到了这个错误。检查 netstat -ant 并显示“SYN SENT”到 [pypi.python.org] 端口 80。但是为什么?我的 $http_proxy 服务器清楚地将其他流量发送到另一个 IP 和端口 8080?!它是全局设置的,不管用户是root用户还是其他用户,所以 sudo -E 解决方案不起作用。

在 pip 版本 1.0 -> 1.3.1 中不检查环境变量的大小写敏感性——至少对于字符串 HTTP_PROXY 的 os.environ.get() 调用。不完全是“错误”,但与其他已安装的软件(如使用小写或不区分大小写的 Google Chrome)发生冲突。

如果 netstat 显示到某些 IP“not-your-proxies-IP”的端口 80 的流量,一种解决方案就是修改 pip/download.py 以查找小写的 env var 'http_proxy'。或者,确保在您的环境中同时设置了 $http_proxy 和 $HTTP_PROXY。

这是我的测试:

user@host:~$ grep -R HTTP_PROXY /usr/local/lib/python2.7/dist-packages/pip/*

/usr/local/lib/python2.7/dist-packages/pip/download.py:            
proxystr = os.environ.get('HTTP_PROXY', '')

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> proxystr = os.environ.get('HTTP_PROXY', '')
>>> proxystr
''

Now I change HTTP_PROXY to http_proxy and the same snippet of download.py returns the value of my proxy

>>> proxystr = os.environ.get('http_proxy', '')
>>> proxystr
'http://proxyserver.mydomain.com:8080/'
于 2013-06-06T15:18:58.360 回答