使用 pip 安装包时出现错误 403

问题描述 投票:0回答:5

使用 pip 安装 google app engine 时出现错误

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/`
python google-app-engine pip
5个回答
25
投票

这是因为 PyPI 禁用了对 API 的非 HTTPS 访问

https://mail.python.org/pipermail/distutils-sig/2017-October/031712.html

作为解决方法,您可以使用

$ pip install xxxx -i https://pypi.python.org/simple/

3
投票

不幸的是,以前的答案都不适合我。

恕我直言,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"

工作中:如果失败的网址位于 http,请在 https 上重试。

我知道它有点难看,但它非常清楚,你也可以快速恢复到原始模块(在应用之前复制 /usr/local/lib/python2.7/urllib2.py这个补丁)。


0
投票

对我有用的唯一解决方案是使用 easy_install 而不是 pip


0
投票

如果 Python 项目有 Git URL,那么您可以尝试此命令,它将使用 git 进行 pip install。

python -m pip install git+https://github.com//

但是,如果项目有任何依赖项,并且依赖项也遇到同样的问题(通常情况),那么此类依赖项也会失败。


-1
投票

出现错误。 问题在于 pip 尝试安装软件包的存储库。

© www.soinside.com 2019 - 2024. All rights reserved.