與AttributeError Python命令執行失敗

學習如何當一個Python命令與AttributeError磚筆記本失敗。

寫的亞當Pavlacka

去年發表在:2022年5月19日

這篇文章可以幫助您解決場景Python命令執行失敗的AttributeError

問題:“元組對象沒有屬性“類型”

當您運行一個筆記本,Python命令執行失敗與以下錯誤和堆棧跟蹤:

AttributeError:“元組”對象沒有屬性“類型”
回溯(最近調用最後):文件“/ local_disk0 / tmp / 1547561952809 - 0 / PythonShell。py”第23行,在<模塊>進口matplotlib mpl文件“/磚/ python /地方/ lib / python2.7 /網站/ matplotlib / __init__。py”, 122行,從matplotlib <模塊>。進口圖書貝貝is_string_like mplDeprecation,取消縮進,get_label文件“/磚/ python /地方/ lib / python2.7 /網站/ matplotlib /圖書貝貝。py”, 33歲的線在<模塊>進口numpy np文件“/磚/ python /地方/ lib / python2.7 /網站/ numpy / __init__。py”, 142行,在<模塊>。進口核心文件“/磚/ python /地方/ lib / python2.7 /網站/ numpy /核心/ __init__。py”, 57歲,在<模塊>。進口numerictypes nt文件“/磚/ python /地方/ lib / python2.7 /網站/ numpy / / numerictypes核心。py”, 111行,在<模塊> ._type_aliases進口(文件“/磚/ python /地方/ lib / python2.7 /網站/ numpy /核心/ _type_aliases。py”, 63行,在<模塊> _concrete_types = {v。在_concrete_typeinfo.items類型k、v()}文件“/磚/ python /地方/ lib / python2.7 /網站/ numpy /核心/ _type_aliases。py”, 63行,在< setcomp > _concrete_types = {v。在_concrete_typeinfo.items類型k、v ()} AttributeError:“元組”對象沒有屬性“類型”19/01/15 11:29:26警告PythonDriverWrapper: setupRepl: ReplId-7d8d1-8cc01-2d329-9:最後,狀態是錯誤(ReplId-7d8d1-8cc01-2d329, com.databricks.backend.daemon.driver。PythonDriverLocal PythonException美元:Python shell未能在30秒開始)

導致

一個新版本的numpy(1.16.1),它由一些PyPI客戶安裝在默認情況下,與其他庫不兼容。

解決方案

按照以下步驟創建一個集群級init腳本(AWS|Azure|GCP),刪除當前版本並安裝numpy 1.15.0版本。

  1. 如果init腳本已經不存在,創建一個基本目錄來存儲:
    % python dbutils.fs.mkdirs (“dbfs: /磚/ <目錄> /”)
  2. 創建以下腳本:
    % python dbutils.fs.put (“dbfs: /磚/ <目錄> / numpy。sh”、“”“# !/bin/bash pip卸載——是的numpy rm射頻/home/ubuntu/databricks/python/lib/python3.5/site-packages rm / numpy *射頻/磚/ python / lib / python3.5 /網站/ numpy * /usr/bin/yes | /home/ubuntu/databricks/python/bin/pip安裝numpy = = 1.15.0”“”,真的)
  3. 確認腳本存在:
    % python顯示器(dbutils.fs.ls (“dbfs: /磚/ <目錄> / numpy.sh”))
  4. 去集群配置頁麵(AWS|Azure|GCP),然後點擊高級選項切換。
  5. 在頁麵的底部,單擊Init腳本標簽:Init腳本選項卡的形象。
  6. 目的地下拉,選擇DBFS提供這個腳本文件路徑,點擊添加
  7. 重新啟動集群。
  8. 在PyPI客戶端,銷numpy1.15.1安裝版本,最新的工作版本。

問題:模塊“自由”沒有屬性“SSL_ST_INIT”

當您運行一個筆記本,圖書館安裝失敗和筆記本電腦上執行的所有Python命令取消了下麵的錯誤和堆棧跟蹤:

AttributeError:模塊“自由”沒有屬性“SSL_ST_INIT”
回溯(最近調用最後):文件“/磚/ python3 / bin /脈衝”,第7行,皮普的<模塊>。_internal進口主文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal / __init__。py”,第40行,從pip._internal.cli <模塊>。自動完成導入自動完成文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal / cli /自動完成。py”, 8號線,在從pip._internal.cli <模塊>。main_parser導入create_main_parser文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal / cli / main_parser。py”第12行,在<模塊> pip._internal.commands進口(文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal /命令/ __init__。py”, 6號線,在<模塊> pip._internal.commands.completion CompletionCommand文件導入”/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal /命令/完成。py”, 6號線,從pip._internal.cli <模塊>。base_command導入命令文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal / cli / base_command。py”第20行,從pip._internal <模塊>。下載導入PipSession文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _internal /下載。py”,第15行,皮普的<模塊>。_vendor導入請求6 urllib3文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _vendor /請求/ __init__。py”, 97行,從pip._vendor.urllib3 <模塊>。contrib導入pyopenssl文件“/磚/ python3 / lib / python3.5 /網站/脈衝/ _vendor urllib3 / contrib / pyopenssl。py”, 46歲,在<模塊>進口OpenSSL。SSL文件“/磚/ python3 / lib / python3.5 /網站/ OpenSSL / __init__。py", line 8, in  from OpenSSL import rand, crypto, SSL File "/databricks/python3/lib/python3.5/site-packages/OpenSSL/SSL.py", line 124, in  SSL_ST_INIT = _lib.SSL_ST_INIT AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

導致

一個更新版本的密碼學包(在這種情況下,2.7)被安裝在默認情況下隨著另一個PyPI庫,這密碼學版本是不兼容的版本pyOpenSSL包含在磚運行時。

解決方案

為了解決和防止這個問題,升級pyOpenSSL之前最新版本安裝任何庫。使用一個集群級init腳本(AWS|Azure|GCP安裝最新版本的pyOpenSSL:

  1. 如果init腳本已經不存在,創建一個基本目錄來存儲:
    % python dbutils.fs.mkdirs (“dbfs: /磚/ <目錄> /”)
  2. 創建以下腳本:
    % python dbutils.fs.put (“dbfs: /磚/ <目錄> / openssl_fix。sh”、“”“# !/bin/bash回聲“刪除pyOpenSSL包”rm射頻/磚/ python2 / lib / python2.7 /網站/ OpenSSL rm射頻/磚/ python2 / lib / python2.7 /網站/ pyOpenSSL-16.0.0 - *。egg-info rm射頻/磚/ python3 / lib / python3.5 /網站/ OpenSSL rm射頻/磚/ python3 / lib / python3.5 /網站/ pyOpenSSL-16.0.0 *。egg-info /磚/ python2 / bin / pip安裝pyOpenSSL = = 19.0.0 /磚/ python3 / bin / pip3安裝pyOpenSSL = = 19.0.0”“”,真的)
  3. 確認腳本存在:
    % python顯示器(dbutils.fs.ls (“dbfs: /磚/ <目錄> / openssl_fix.sh”))
  4. 去集群配置頁麵(AWS|Azure|GCP),然後點擊高級選項切換。
  5. 在頁麵的底部,單擊Init腳本標簽:Init腳本選項卡的形象。
  6. 目的地下拉,選擇DBFS提供這個腳本文件路徑,點擊添加
  7. 重新啟動集群。
這篇文章有用嗎?