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版本?
经过多次尝试,我仍然遇到了同样的错误。有人可能会回答我正在处理的这个麻烦吗?任何帮助将不胜感激!!
答案 0 :(得分:0)
你的urllib3已经过时了。更新
答案 1 :(得分:0)
InsecurePlatformWarning
归功于你的Python& urllib3
版本。
如果您不关心安全性,只需禁用警告:
export PYTHONWARNINGS="ignore:A true SSLContext object is not available"
您的Permission denied
错误看起来像文件权限问题。您正在运行的用户pip
或setuptools
因为没有/Library/Python/2.7/site-packages/south
的写入权限。看起来你在Mac上,所以你应该:
--user
标记表示点,(推荐)pip install --user foo-package
/Users/your-username-here/Library/Python/2.7/lib/python/site-packages/
以root用户身份安装:sudo
sudo pip install foo-package
的所有权更改为您的用户(不推荐):/Library/Python/2.7/site-packages
此警告在具有旧版本Python的平台上提供,sudo chown -R your-username-here:wheel /Library/Python/2.7/site-packages
& urllib3
无法控制或不支持确保与服务器安全连接所需的某些SSL选项。
您可能会遇到:requests
,Python <= 2.7.9
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
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的人之间的区别