在终端

时间:2015-04-29 19:44:04

标签: python installation django-south

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版本?

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

2 个答案:

答案 0 :(得分:0)

你的urllib3已经过时了。更新

答案 1 :(得分:0)

简答:

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. 使用--user标记表示点,(推荐
    即:pip install --user foo-package

    这将安装包:{{ 1}} 注意: This is your "per user site-packages directory
  2. 使用/Users/your-username-here/Library/Python/2.7/lib/python/site-packages/以root用户身份安装:sudo
  3. sudo pip install foo-package的所有权更改为您的用户(不推荐):
    /Library/Python/2.7/site-packages
  4. 答案很长:

    此警告在具有旧版本Python的平台上提供,sudo chown -R your-username-here:wheel /Library/Python/2.7/site-packages& urllib3无法控制或不支持确保与服务器安全连接所需的某些SSL选项。

    受影响的版本

    您可能会遇到:requestsPython <= 2.7.9

    urllib3文档

    urllib3 Documentation解释了如下错误消息:

      

    版本1.11中的新功能。

         

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

         

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

         

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

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

      

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

         

    这样做的历史原因是我们依赖于httplib来实现某些HTTP协议,而httplib并不是开箱即用的验证请求。这不是一个好理由,但我们在这里。

         

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

    变通方法

    禁用警告

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

    PYTHONWARNINGS

    这应该适用于Python 2.7+,您也可以使用export PYTHONWARNINGS="ignore:A true SSLContext object is not available" 标志作为Python解释器。

    您还可以在代码中使用Disable Warnings,或使用-W模块:

    logging

    在旧版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时知道需要这些依赖项,那么现在可以执行以下操作:

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

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

    pip install urllib3[secure]
    
      

    软件包名称可能因您使用的Linux版本而异。

    更详细的技术信息

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

      

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

         
        
    • 在Python 2.6上,它根本无法设置密码,因此它依赖于平台默认值。
    •   
    • 无法禁用TLS压缩。
    •   
    • 无需明确固定TLSv1.0即可禁用SSLv3。
    •   
    • 它不能(以及足以支持它的OpenSSL)告诉OpenSSL更喜欢更短但仍然有效的证书链,这使得很难从信任根中删除弱1024位密钥打破了许多其他有效的TLS连接。
    •   
    • 它不支持SNI,它强制pip兼容的存储库使用刻录整个IP地址只是为了使用TLS,虽然与安全性没有严格关系,但可能是使用经过验证的TLS和未经验证的TLS的人之间的区别
    •