【问题标题】:Encountering InsecurePlatformWarning while installing South for Python on Terminal在终端上安装 South for Python 时遇到 InsecurePlatformWarning
【发布时间】:2015-04-29 19:44:04
【问题描述】:

python新手,我正在尝试在终端上安装南,但我一直收到此错误:

error: could not create '/Library/Python/2.7/site-packages/south': Permission denied

后跟:

 Command "/usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/0h/l9sjp7_50kj0581vz9xtwm5w0000gp/T/pip-build-iJUmlt/south/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/0h/l9sjp7_50kj0581vz9xtwm5w0000gp/T/pip-Z8bOI8-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/0h/l9sjp7_50kj0581vz9xtwm5w0000gp/T/pip-build-iJUmlt/south

这是一个安全问题吗?由于我一直在网上寻找答案,因此我尝试通过以下方式安装“一些隐藏的安全功能”:

pip install requests[security]

或者,这是因为我使用的 python 版本吗?

经过多次尝试,我仍然遇到同样的错误。有人可以回答我正在处理的这个麻烦吗?任何帮助将不胜感激!

【问题讨论】:

    标签: python installation django-south


    【解决方案1】:

    您的 urllib3 已过期。更新。

    【讨论】:

      【解决方案2】:

      简答:

      InsecurePlatformWarning 是由于您的 Python 和 urllib3 版本。

      如果您不关心安全性,只需禁用警告:

      export PYTHONWARNINGS="ignore:A true SSLContext object is not available"
      

      您的Permission denied 错误看起来像是文件权限问题。您正在运行pipsetuptools 的用户没有对/Library/Python/2.7/site-packages/south 的写访问权限。看起来您使用的是 Mac,因此您应该:

      1. 为 pip 使用 --user 标志,(推荐
        即:pip install --user foo-package

        这会将软件包安装到:/Users/your-username-here/Library/Python/2.7/lib/python/site-packages/
        注意: This is your "per user site-packages directory
      2. 使用sudo 以root 身份安装:sudo pip install foo-package
      3. /Library/Python/2.7/site-packages 的所有权更改为您的用户(不推荐):
        sudo chown -R your-username-here:wheel /Library/Python/2.7/site-packages

      长答案:

      此警告在具有旧版 Python 的平台上发出,其中 urllib3requests 无法控制或不支持确保与服务器安全连接所需的某些 SSL 选项。

      受影响的版本

      您可能会遇到这种情况:Python <= 2.7.9urllib3 >= 1.11

      urllib3 文档

      urllib3 Documentation 对错误消息的解释如下:

      1.11 版中的新功能。

      某些 Python 平台(特别是 2.7.9 之前的 Python 版本)在其 ssl 模块中存在限制,从而限制了 urllib3 可以应用的配置。特别是,这可能会导致在功能更强大的平台上成功的 HTTPS 请求失败,并可能导致某些安全功能不可用。

      如果您遇到此警告,强烈建议您升级到较新的 Python 版本,或者按照 OpenSSL / PyOpenSSL 部分中的说明使用 pyOpenSSL。

      有关禁用警告的信息,请参阅禁用警告。

      从历史上看,urllib3 从来没有真正安全过。 first heading in the urllib3 docs states this

      非常重要的事实:默认情况下,urllib3 不验证 HTTPS 请求。

      造成这种情况的历史原因是我们依赖 httplib 进行一些 HTTP 协议实现,而 httplib 并没有开箱即用地验证请求。这不是一个很好的理由,但我们到了。

      幸运的是,启用经过验证的 HTTPS 请求并不难,并且有几种方法可以做到。

      解决方法

      禁用警告

      如果您只需要使警告静音,有几种方法。最简单的方法是在运行 python 代码之前设置 PYTHONWARNINGS 环境变量,如下所示:

      export PYTHONWARNINGS="ignore:A true SSLContext object is not available"
      

      这应该可以在 Python 2.7+ 中使用,您也可以将 -W 标志用于 Python 解释器。

      您也可以在代码中Disable Warnings,或使用logging 模块:

      # To disable all urllib3 warnings
      import urllib3
      urllib3.disable_warnings()
      
      # To capture warnings to your own log with the logging module
      logging.captureWarnings(True)
      

      在旧版 Python 上安装 SNI 支持

      urllib3 Documentation shows how to install SNI support

      如果需要在 Python 2.6 或 Python 2.7.0-2.7.8 上使用 SNI,则必须分别安装 PyOpenSSL、ndghttpsclient 和 pyasn1。此外,要使用 certifi,您必须单独安装它。如果您在安装 urllib3 时知道需要这些依赖项,您现在可以这样做:

      pip install urllib3[secure]
      

      注意如果您在 linux 上执行此操作,例如 Ubuntu 14.04,您将需要 PyOpenSSL 的额外系统依赖项。具体来说,PyOpenSSL 需要加密,这需要您安装:

      build-essential
      python-dev
      libffi-dev
      libssl-dev
      

      软件包名称可能因您使用的 linux 发行版而异。

      更详细的技术信息

      GitHub user dstufft 更详细地解释了为什么旧版本的 Python 无法确保安全连接:

      除非您拥有 Python 2.7.9+ 或 Python 3.2+ urllib3(通过请求),否则无法控制它需要的某些 SSL 选项以确保与服务器的安全连接。特别是:

      • 在 Python 2.6 上,它根本无法设置密码,因此它依赖于平台默认设置。
      • 它无法禁用 TLS 压缩。
      • 它无法禁用 SSLv3,而无需明确固定到 TLSv1.0。
      • 它不能(连同一个足够新的 OpenSSL 来支持它)告诉 OpenSSL 选择更短但仍然有效的证书链,这使得很难在不破坏信任根的情况下从信任根中删除弱 1024 位密钥许多其他有效的 TLS 连接。
      • 它不支持 SNI,这会强制 pip 兼容存储库使用烧录整个 IP 地址来使用 TLS,虽然与安全性没有严格相关,但它可能是使用已验证 TLS 和未验证 TLS 的人之间的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-24
        • 2022-08-13
        • 1970-01-01
        • 2020-05-31
        • 2015-11-01
        • 1970-01-01
        • 2022-08-03
        • 2015-01-08
        相关资源
        最近更新 更多