簡體   English   中英

在終端上為Python安裝South時遇到InsecurePlatformWarning

[英]Encountering InsecurePlatformWarning while installing South for Python on Terminal

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

經過多次嘗試,我仍然遇到相同的錯誤。 有人可以回答我正在處理的這個麻煩嗎? 任何幫助將不勝感激!!

您的urllib3已過期。 更新。

簡短答案:

InsecurePlatformWarning是由於您的Python和urllib3版本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

    這會將軟件包安裝到:/ /Users/your-username-here/Library/Python/2.7/lib/python/site-packages/
    注意: 這是您的“每用戶site-packages目錄
  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文檔說明了如下錯誤消息:

1.11版中的新功能。

某些Python平台(特別是2.7.9之前的Python版本)在其ssl模塊中具有限制,這些限制限制了urllib3可以應用的配置。 特別是,這可能會導致在功能更強大的平台上成功的HTTPS請求失敗,並可能導致某些安全功能不可用。

如果遇到此警告,強烈建議您升級到新的Python版本,或者按照OpenSSL / PyOpenSSL部分中的說明使用pyOpenSSL。

有關禁用警告的信息,請參閱禁用警告。

從歷史上看,urllib3從未真正安全過。 urllib3文檔中第一個標題指出

非常重要的事實:默認情況下,urllib3不驗證HTTPS請求。

造成這種情況的歷史原因是,我們依賴於httplib來實現某些HTTP協議,而httplib並不能立即驗證請求。 這不是一個好理由,但是我們來了。

幸運的是,啟用已驗證的HTTPS請求並不是很困難,有幾種方法可以做到這一點。

解決方法

禁用警告

如果只需要使警告靜音,則有幾種方法。 最簡單的方法是在運行python代碼之前先設置PYTHONWARNINGS環境變量,如下所示:

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

這應該在Python 2.7+中有效,並且您也可以在Python解釋器中使用-W標志。

您也可以在代碼中或通過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文檔顯示了如何安裝SNI支持

如果需要在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用戶dstufft更詳細地解釋了為什么舊版本的Python無法確保安全連接:

除非您擁有Python 2.7.9+或Python 3.2+,否則urllib3(通過請求)無法控制其某些SSL選項,以確保與服務器的安全連接。 尤其是:

  • 在Python 2.6上,它根本無法設置密碼,因此它依賴於平台默認值。
  • 它無法禁用TLS壓縮。
  • 它不能禁用SSLv3,而不必顯式固定到TLSv1.0。
  • 它不能(以及足夠新的OpenSSL支持它)告訴OpenSSL首選較短但仍然有效的證書鏈,這使得很難從信任根中刪除弱的1024位密鑰而不會破壞很多其他方面有效的TLS連接。
  • 它不支持SNI,后者會強制pip兼容存儲庫僅使用TLS來刻錄整個IP地址,而與安全性不嚴格相關的則可能是使用已驗證TLS的人與未驗證TLS的人之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM