Я настраиваю virtualenv на основе Python 2.7 в Redhat Enterprise 6 (который по умолчанию поставляется с 2.6.x).
Я установил версию Python для SCL 2.7, а затем создал virtualenv:
$ scl enable python27 bash
$ cd /my/project
$ virtualenv -v --clear --extra-search-dir=/opt/rh/python27/root/usr/bin/ --python=/opt/rh/python27/root/usr/bin/python virtualenv
$ source virtualenv/bin/acticvate
Все идет нормально. Проблемы начались, когда я попытался запустить pip за прокси-сервером моего учреждения:
$ pip install Werkzeug --proxy proxy.example.org:3128
Downloading/unpacking Werkzeug
Cleaning up...
Exception:
Traceback (most recent call last):
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/basecommand.py", line 134, in main
status = self.run(options, args)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/commands/install.py", line 236, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/req.py", line 1085, in prepare_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/index.py", line 201, in find_requirement
page = self._get_page(main_index_url, req)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/index.py", line 554, in _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/index.py", line 671, in get_page
resp = urlopen(url)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/download.py", line 176, in __call__
response = self.get_opener(scheme=scheme).open(url)
File "/opt/rh/python27/root/usr/lib64/python2.7/urllib2.py", line 404, in open
response = self._open(req, data)
File "/opt/rh/python27/root/usr/lib64/python2.7/urllib2.py", line 422, in _open
'_open', req)
File "/opt/rh/python27/root/usr/lib64/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/download.py", line 155, in https_open
return self.do_open(self.specialized_conn_class, req)
File "/opt/rh/python27/root/usr/lib64/python2.7/urllib2.py", line 1183, in do_open
h.request(req.get_method(), req.get_selector(), req.data, headers)
File "/opt/rh/python27/root/usr/lib64/python2.7/httplib.py", line 1001, in request
self._send_request(method, url, body, headers)
File "/opt/rh/python27/root/usr/lib64/python2.7/httplib.py", line 1035, in _send_request
self.endheaders(body)
File "/opt/rh/python27/root/usr/lib64/python2.7/httplib.py", line 997, in endheaders
self._send_output(message_body)
File "/opt/rh/python27/root/usr/lib64/python2.7/httplib.py", line 850, in _send_output
self.send(msg)
File "/opt/rh/python27/root/usr/lib64/python2.7/httplib.py", line 812, in send
self.connect()
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/download.py", line 139, in connect
match_hostname(self.sock.getpeercert(), self.host)
File "/my/project/virtualenv/lib/python2.7/site-packages/pip/backwardcompat/ssl_match_hostname.py", line 61, in match_hostname
% (hostname, ', '.join(map(repr, dnsnames))))
CertificateError: hostname 'proxy.example.org' doesn't match either of 'www.python.org', 'python.org', 'pypi.python.org', 'docs.python.org', 'testpypi.python.org', 'bug>>>s.python.org', 'wiki.python.org', 'hg.python.org', 'mail.python.org', 'packaging.python.org', 'pythonhosted.org', 'www.pythonhosted.org', 'test.pythonhosted.org', 'us.py>>>con.org', 'id.python.org', 'pypi.io'
Я видел эту проблему в других вопросах, но ни один из них, похоже, не относится к моему делу.
Редактировать:
Например. Я попытался установить переменные среды, как в https://stackoverflow.com/questions/21468550/pip-not-working-behind-firewall . Другие случаи касались проблем с Windows.
Возможно, стоит упомянуть, что этот virtualenv не будет работать, если я не в среде scl, например если я позвоню python
включив virtualenv, но не scl, он будет жаловаться, что libpython2.7.so.1.0 не может быть найден. Я не знаю, надуманный ли это дизайн, но я ожидал, что все библиотеки, от которых зависит Python 2.7, будут связаны или скопированы в virtualenv. Может я что то не так сделал в установке virtualenv?
Вы, наверное, уже решили это, но похоже, что вам нужно использовать опцию доверенного хоста:
pip install Werkzeug --proxy proxy.example.org:3128 --trusted-host proxy.example.org