Получение ошибки 403 при установке пакета с помощью pip
Ошибка при установке движка приложения Google с помощью pip
Collecting google_appengine
Downloading google-appengine-1.5.1.tar.gz (897kB)
100% |████████████████████████████████| 901kB 1.9MB/s
Complete output from command python setup.py egg_info:
Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.14.tar.gz
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/88/5jq5gz011sl63h_37k_qftv40000gn/T/pip-build-vxx8Ov/google-appengine/setup.py", line 3, in <module>
ez_setup.use_setuptools()
File "/Users/user/path to project/project/venv/lib/python2.7/site-packages/ez_setup.py", line 145, in use_setuptools
return _do_download(version, download_base, to_dir, download_delay)
File "/Users/user/path to project/project/venv/lib/python2.7/site-packages/ez_setup.py", line 124, in _do_download
to_dir, download_delay)
File "/Users/user/path to project/project/venv/lib/python2.7/site-packages/ez_setup.py", line 193, in download_setuptools
src = urlopen(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 437, in open
response = meth(req, response)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 550, in http_response
'http', request, response, code, msg, hdrs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 475, in error
return self._call_chain(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 558, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: SSL is required
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/88/5jq5gz011sl63h_37k_qftv40000gn/T/pip-build-vxx8Ov/google-appengine/`
4 ответа
Это потому, что PyPI отключил не HTTPS доступ к API
https://mail.python.org/pipermail/distutils-sig/2017-October/031712.html
В качестве обходного пути вы можете использовать
$ pip install xxxx -i https://pypi.python.org/simple/
К сожалению, ни один из предыдущих ответов не работает для меня.
ИМХО это было очень глупо, pip / distutils выбрал сломать пакеты в http-репозиториях.
Думаю, лучшим выбором было бы:
pip / distutils по умолчанию использует https
в случае ошибки, например, 403, pip должен предложить вам "репозиторий пакета находится на http, вы хотите его загрузить?"
Тем не менее, в 2020 году многие пакеты Python 2 находятся в HTTP-репозиториях; с их решением установка этих пакетов нарушена.
Рабочее решение для меня - очень простой патч для одного модуля ядра Python:
--- /usr/local/lib/python2.7/urllib2.py.original
+++ /usr/local/lib/python2.7/urllib2.py
@@ -427,6 +427,9 @@
req = meth(req)
response = self._open(req, data)
+ if protocol == "http" and response.code == 403 :
+ if isinstance(fullurl, basestring) and fullurl.startswith("http://pypi.python.org/packages/source/d/distribute/") :
+ return self.open(fullurl.replace("http://", "https://"), data = data, timeout = timeout)
# post-process response
meth_name = protocol+"_response"
Работает: если неудачный URL-адрес находится на http, повторите попытку на https.
Я знаю, что это немного некрасиво, но это очень ясно, и вы также можете мгновенно вернуться к исходному модулю (сделайте копию /usr/local/lib/python2.7/urllib2.py, прежде чем применять этот патч).
Получил ошибку. Проблема была в репозитории, откуда pip пытался установить пакет.
Единственным решением, которое сработало для меня, было использование easy_install вместо pip.