पायथन एट्रीब्यूट: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'SSL_ST_INIT'


80

मेरे साथ एक पायथन स्क्रिप्ट विफल हो रही है:

Traceback (most recent call last):
  File "./inspect_sheet.py", line 21, in <module>
    main()
  File "./inspect_sheet.py", line 12, in main
    workbook_name=workbook_name,
  File "./google_sheets.py", line 56, in __init__
    self.login()
  File "./google_sheets.py", line 46, in login
    self.client = gspread.authorize(credentials)
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 335, in authorize
    client.login()
  File "/usr/local/lib/python2.7/site-packages/gspread/client.py", line 98, in login
    self.auth.refresh(http)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 598, in refresh
    self._refresh(http.request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 769, in _refresh
    self._do_refresh_request(http_request)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 795, in _do_refresh_request
    body = self._generate_refresh_request_body()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1425, in _generate_refresh_request_body
    assertion = self._generate_assertion()
  File "/usr/local/lib/python2.7/site-packages/oauth2client/client.py", line 1554, in _generate_assertion
    private_key, self.private_key_password), payload)
  File "/usr/local/lib/python2.7/site-packages/oauth2client/crypt.py", line 162, in from_string
    from OpenSSL import crypto
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

मैं डेबियन-जेसी के साथ इस समस्या में चलाता हूं, python-opensslजेसी-बैकपोर्ट से उन्नत पैकेज (16.0.0-1 ~ बीपीओ + 1) भी काम नहीं करता है, इसलिए मुझे समाधान के अनुसार पाइप का उपयोग करके इसे अपग्रेड करना होगा (प्रयुक्त संस्करण 18.0 था .0)
iuridiniz

जवाबों:


160

pyopensslपाइप के साथ अपग्रेड करना pipमेरे लिए काम कर रहा था, इससे संबंधित कोई भी कमांड काम नहीं कर रहा था। के pyopensslसाथ उन्नयन करके easy_install, उपरोक्त समस्या को हल किया जा सकता है।

sudo python -m easy_install --upgrade pyOpenSSL

क्रेडिट @delimiter ( उत्तर )


2
धन्यवाद! मुझे इस आदेश के बाद अपने टर्मिनल को फिर से शुरू करना पड़ा और अपने सर्वर में वापस जाना पड़ा, और pipउसके बाद ठीक काम किया।
जार्विस जॉनसन

नई त्रुटि को पूरा करें -रोर: सेटअप स्क्रिप्ट त्रुटि के साथ बाहर निकली: कमांड 'gcc' निकास स्थिति 1 के साथ विफल रही
brainLoop

यह मददगार है, शायद, लेकिन फिर से लॉग आउट और बैक में भी, मुझे अभी भी AttributeErrorओपी में मिल रहा है ।
एड्रियन कीस्टर

80

समस्या का पता चला मेरी समस्या pyOpenSSL, pyOpenSSL-0.15.1 की स्थापना के साथ थी।

मैंने किया:

pip uninstall pyopenssl

और फिर

pip install pyopenssl

... और मेरी पायथन लिपि ने फिर से काम किया!


35
मुझे pipखुद को चलाने में परेशानी हुई , इसने इसे हल कर दियाsudo easy_install pyOpenSSL
chinmay

2
सिर्फ क्रिप्टोग्राफी अपग्रेड किया था; अपने समाधान मेरे मामले में पर्याप्त था
denvar

3
मेरे मामले में मुझे इस तरह की स्थापना रद्द करनी पड़ी: sudo aptitude purge python-opensslक्योंकि यह साथ स्थापित किया गया था aptitude। मुझे लगता है कि मैं ऐसा ही कर सकता हूंapt-get
चेसुआरसी

2
मुझे हर बार दौड़ने में त्रुटि हुई pip। तो किया rm -rf cryptographyऔर फिर से पाइप चला सकता है।
जॉन स्ट्रॉड

1
इस समस्या ने मुझे सफलतापूर्वक चल रहे पाइप से रोका। इसलिए, मुझे बेन के निर्देशों का पालन करने से पहले लिपि / python2.7 / साइट-संकुल से क्रिप्टोग्राफी को निकालना पड़ा।
मिलाद एम

17

अपने pyopensslमॉड्यूल को अपडेट करें :

$ sudo pip install -U pyopenssl

1
धन्यवाद, मुझे लगता है कि फिर से स्थापना रद्द करने और स्थापित करने से अधिक कुशल है।
बेन व्हीलर

1
यदि आप virtualenv का उपयोग करते हैं तो आपको sudo की आवश्यकता नहीं है।
क्रिस

17

मेरे पास एक समान त्रुटि थी:

    from OpenSSL import rand, crypto, SSL
  File "/usr/local/lib/python3.5/dist-packages/OpenSSL/SSL.py", line 112, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

और कोई भी अन्य उत्तर इसे ठीक नहीं कर सकता था, क्योंकि पाइप कुछ भी स्थापित नहीं कर सकता था। इसके बजाय, मैंने पहले टर्मिनल से क्या किया था:

sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL

फिर पाइप से pyopenssl को फिर से इंस्टॉल किया गया:

sudo pip install pyopenssl

और सब कुछ ग्रेवी था।


1
वर्थ नोटिंग: यदि आप virtualenv का उपयोग करते हैं तो संभवतः आपको निकालने की आवश्यकता है rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL
warcholprzemo

11

निम्नलिखित आदेशों के साथ प्रयास करें:

easy_install -U pip
easy_install -U pyOpenSSL

9

मैंने हाल ही में इसी मुद्दे का अनुभव किया और कुछ घंटों की जांच के बाद, मुझे पता चला कि यह न्यू क्रिप्टोग्राफी 2.0 अपग्रेड के कारण हुआ था । यह नवीनीकरण pyopenssl (जैसे संतरी, Google Analytics और आदि) का उपयोग करके कई पैकेजों को तोड़ देगा। सिर्फ 1.9 पर डाउनग्रेड करने से समस्या हल हो जाएगी।

सतर्क रहें यदि आप "पाइप इंस्टॉल-यू" का उपयोग कर रहे हैं, तो यह स्वचालित रूप से उन पैकेजों को अपग्रेड करेगा जो आवश्यकताओं में सूचीबद्ध नहीं हैं।


धन्यवाद, यह काम किया। Pyopenssl को अपग्रेड करना मेरे लिए पर्याप्त नहीं था।
r11

5

मेरे मामले में, समस्या यह थी कि पैकेज को रूट निर्देशिकाओं में स्थापित किया गया था , और मैं उस स्क्रिप्ट को निष्पादित कर रहा था जो pyopensslमेरे लिनक्स उपयोगकर्ता फ़ोरवस से पूछ रहा था । और वह उपयोगकर्ता रूट में स्थापित पुस्तकालयों का उपयोग नहीं कर सकता है।

इसलिए पहले मुझे पैकेज को aptitudeया उसके साथ हटाना पड़ा apt-get

sudo aptitude purge python-openssl

इसलिए, मुझे पैकेज को फिर से स्थापित करना था, लेकिन उस उपयोगकर्ता को ध्यान में रखना जो उस स्क्रिप्ट को निष्पादित कर रहा है जो पुस्तकालय के लिए पूछ रहा है। लिनक्स उपयोगकर्ता के तर्क और तर्क --userके आधार पर लाइब्रेरी स्थापित करने के लिए एक नज़र डालें pip

मामला एक

forvas@server:$ pip install pyopenssl

एन्वायरन्मेंट एट्र्रम के कारण पैकेज स्थापित नहीं किया जा सका:

[इरनो १३] अनुमति से इनकार किया: '/usr/local/lib/python2.7/dist-packages/OpenSSL'

--userविकल्प का उपयोग करने पर विचार करें या अनुमतियों की जांच करें।

केस 2

forvas@server:$ sudo pip install pyopenssl

/us/local/lib/python2.7/dist-packages/OpenSSL/*

/usr/local/lib/python2.7/dist-packages/pyOpenSSL-17.5.0.dist-info/*

केस 3

forvas@server:$ sudo pip install --user pyopenssl

/home/forvas/.local/lib/python2.7/site-packages/OpenSSL_

/home/forvas/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*

केस 4

root@server:$ pip install pyopenssl

/us/local/lib/python2.7/dist-packages/OpenSSL/*

/usr/local/lib/python2.7/dist-packages/pyOpenSSL-17.5.0.dist-info/*

केस 5

root@server:$ pip install --user pyopenssl

/root/.local/lib/python2.7/site-packages/OpenSSL/*

/root/.local/lib/python2.7/site-packages/pyOpenSSL-17.5.0.dist-info/*

निष्कर्ष

मेरी समस्या यह थी कि पुस्तकालय केस 5 की निर्देशिका में स्थापित किया गया था ।

उपाय

  • पैकेज की स्थापना रद्द करना।

  • जैसा कि मैं लिनक्स यूजर फॉरेक्स के साथ स्क्रिप्ट निष्पादित कर रहा हूं , मैं पैकेज को 2 या 4 (जिसमें सभी लिनक्स उपयोगकर्ताओं के लिए लाइब्रेरी उपलब्ध है) या अधिक सटीक विकल्प के साथ पैकेज को फिर से इंस्टॉल करने में सक्षम था , विकल्प 3 (जिसमें लाइब्रेरी है केवल लिनक्स यूजर फोर्ब्स के लिए उपलब्ध है )।


यह पायथन 3 के लिए कैसा लगेगा?
एड्रियन कीस्टर

इस उदाहरण के बाद, उदाहरण के लिए केस 3 होगा sudo python3 -m pip install --user pyopenssl, और संकुल को इसमें संग्रहीत किया जाएगा /home/forvas/.local/lib/python3.6/site-packages
FORVAS

4

मेरे पास एक ही मुद्दा था और पाइप के रूप में काम नहीं कर रहा था, मुझे अपना काम मैन्युअल रूप से करना पड़ा:

wget https://files.pythonhosted.org/packages/40/d0/8efd61531f338a89b4efa48fcf1972d870d2b67a7aea9dcf70783c8464dc/pyOpenSSL-19.0.0.tar.gz
tar -xzvf pyOpenSSL-19.0.0.tar.gz
cd pyOpenSSL-19.0.0
sudo python setup.py install

उसके बाद सब कुछ उम्मीद के मुताबिक काम किया।


3

मेरी समस्या पाइथन ओपनसिएल के संस्करण के कारण थी जो अंदर था /usr/lib/python2.7/dist-packages/

dpkg -l | grep openssl दिखाया है:

ii  python-openssl                                0.15.1-2build1                               all          Python 2 wrapper around the OpenSSL library

मैंने इसका उपयोग करके हटा दिया sudo apt-get remove python-openssl। फिर मैंने पाइप के वितरण संस्करण को स्थापित करने के लिए निम्नलिखित भाग किया।

curl -o ./get-pip.py https://bootstrap.pypa.io/get-pip.py
sudo python2 ./get-pip.py

pip --version अब प्रदर्शित होता है:

pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

मैं तब आवश्यक पाइप स्थापित करने में सक्षम था जिसे मैं पूरा करने की कोशिश कर रहा था।


1
साभार @heatfanjohn मैं आपके जैसी ही स्थिति में था और जैसा आपने लिखा है वैसा ही काम करता है!
icimimpan


2

मैंने AttributeError: 'module' object has no attribute 'SSL_ST_INIT'त्रुटि भी देखी ।

करते हुए

sudo pip install pyOpenSSL==16.2.0

मेरे लिए इसे हल किया।


2

बस अगर किसी और को इस काम को करने के लिए बिल्कुल सही झुकाव नहीं मिल रहा है, तो नवंबर 2018 तक मेरे लिए काम करने वाली चीज़ थी:

sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ sudo apt install --reinstall python-openssl

सौभाग्य!


2

मुझे मैकओएस पर यह समस्या अजगर 2 और 3 के माध्यम से काढ़ा के साथ स्थापित की गई थी। यह पता चला है कि brew uninstallअजगर और अजगर @ 2 किसी भी पुस्तकालयों को नहीं हटाते हैं जो अजगर के उन संस्करणों के लिए स्थापित किए गए थे; में अर्थात्:

/usr/local/lib/python3.7/site-packages/ तथा
/usr/local/lib/python2.7/site-packages/

वहाँ कुछ सही नहीं था, इसलिए मेरे लिए क्या काम किया गया था, ब्रू के अजगर 2 और 3 के लिए सभी स्थापित पुस्तकालयों को हटाने / स्थानांतरित करने के लिए और फिर से शुरू करें (और सुनिश्चित करें कि केवल यहां से virtualenvs का उपयोग करें):

brew uninstall --ignore-dependencies python@2
brew uninstall --ignore-dependencies python
sudo mv /usr/local/lib/python3.7 ~/python3.7libs-backup
sudo mv /usr/local/lib/python2.7 ~/python2.7libs-backup
brew install python
brew install python@2

1

मेरे मामले में, यह स्थापना रद्द करने और उन्नयन के लिए समान त्रुटि फेंक रहा था। मैं स्थापना रद्द या अपग्रेड नहीं कर सका।

AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

निम्नलिखित मेरे लिए काम किया।

# rm -rf /usr/lib/python2.7/site-packages/OpenSSL/
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-16.1.0.dist-info
# rm -rf /usr/lib/python2.7/site-packages/pyOpenSSL-18.0.0-py2.7.egg
# pip2.7 install pyopenssl
Collecting pyopenssl
Downloading 
.
.
100% |████████████████████████████████| 61kB 5.8MB/s 
Collecting cryptography>=2.2.1 (from pyopenssl)
.
.
Installing collected packages: cryptography, pyopenssl
Found existing installation: cryptography 1.7.2
Uninstalling cryptography-1.7.2:
  Successfully uninstalled cryptography-1.7.2
Successfully installed cryptography-2.2.2 pyopenssl-18.0.0

चेतावनी : इसे तभी आज़माएँ जब उन्नयन ( sudo pip install pyOpenSSL==16.2.0) या अनइंस्टॉलिंग ( pip uninstall pyopenssl) मदद नहीं करता हो


1

मैं Ubuntu 16.04 पर एक ही समस्या थी, लेकिन निम्नलिखित मोड़ के साथ: जब virtualenv सक्रिय किया गया था (. venv/bin/activate वर्चुअनव मेरे मामले में pysolr, अनुरोध, आदि के साथ अजवाइन श्रमिकों को चलाने से पहले) - सब कुछ पूरी तरह से काम किया, लेकिन जब मैंने कमांड से पूर्ण पथ का उपयोग करके अजवाइन भागा , और अजगर पथ - एक समस्या थी (और पर्यवेक्षक से चलने वाली एक ही समस्या)। इसके अलावा, यदि महत्वपूर्ण हो, वर्चुअलबेन को उसी उबंटू संस्करण के साथ मशीन पर कहीं और बंडल किया गया है।

समाधान सरल था: /full/path/to/venv/binPATH में जोड़ना (जैसा कि यहां बताया गया है /server/331027/supervisord-how-to-append-to-path ) ने इसे हल कर दिया।

दुर्भाग्य से, मैंने अभी तक यह इंगित नहीं किया है कि यह किस तरह का अद्यतन है, लेकिन उम्मीद है कि यह किसी की मदद कर सकता है।


1

मैं सिर्फ अपने Ubuntu 16.04 होस्ट पर इसका सामना किया। वहाँ अजगर-खुलता है और अजगर क्रायपोग्राफी के लिए उपयुक्त रेपो पैकेज के बीच एक संस्करण संघर्ष प्रतीत होता है, बनाम क्या किसी ने मैन्युअल रूप से /usr/local/python2.7/cist-packages में पाइप के साथ स्थापित किया है।

एक बार जब यह इस स्थिति में आ जाता है, तो सिस्टम मानक पाइप या तो निष्पादित नहीं कर सकता है। मुझे PYTHONPATH पर्यावरण चर को मैन्युअल रूप से सेट करके चिकन और अंडे की समस्या के आसपास मिला, जो कि पेड़ के usr / स्थानीय भाग को छोड़कर:

    $ export PYTHONPATH="/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0"
    $ /usr/bin/pip uninstall cryptography
    $ unset PYTHONPATH

मैंने पायथन शेल के साथ उपयोग करने के लिए पुस्तकालय निर्देशिकाओं की उपरोक्त सूची हासिल कर ली है:

    import sys
    for p in sys.path:
       print(p)

और फिर एक / usr / स्थानीय निर्देशिका को छोड़कर सूचीबद्ध सभी चीज़ों की प्रतिलिपि बनाना। आपके सिस्टम की राह में एक अलग सूची हो सकती है। तदनुसार समायोजित करें।

apt-get install --reinstall python-openssl python-cryptographyमेरे बैश इतिहास में कुछ मैनुअल कमांड्स भी बिखरे हुए थे, जो आवश्यक नहीं थे या हो सकते हैं।


1

इन अन्य समाधानों के मेरे लिए काम नहीं करने के बाद मेरा समाधान बहुत अधिक सरल था। जो कुछ भी मैंने पाइप के माध्यम से स्थापित / अनइंस्टॉल करने की कोशिश की थी, वही त्रुटि और स्टैकट्रेस वापस आ गई।

मैं pip3 के माध्यम से पाइप को अपडेट करने की कोशिश कर रहा हूं और यह त्रुटिपूर्ण काम कर रहा है:

pip3 install --upgrade pip

मैं पाइप का उपयोग करके वापस चला गया और सब कुछ सही ढंग से काम किया। मैंने नोटिस किया कि यह पाइप कमांड चलाने के दौरान पाइथन 3.6 को संदर्भित कर रहा था।

# pip install pyopenssl`enter code here`
Requirement already satisfied: pyopenssl in /usr/lib64/python3.6/site-packages (18.0.0)

<snipped>

Requirement already satisfied: pycparser in /usr/lib64/python3.6/site-packages (from cffi!=1.11.3,>=1.7->cryptography>=2.2.1->pyopenssl) (2.19)

1

इसके साथ प्रयास करें:

export PYTHONPATH="/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0"
sudo apt-get install --reinstall python-openssl

1

मैं अपने Ubuntu 16.04 VM के कंसोल पर समान अजगर स्टैक डंप देख रहा था जब मैंने VM में ssh की कोशिश की।

SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

pipबताया pyopensslगया कि स्थापित नहीं किया गया था।

मुझे इसके बजाय यह करना था:

sudo apt install --reinstall python-openssl

0

यह एक पुरानी पोस्ट है, इसलिए मैं 2019 के अंत में किसी की मदद करने की उम्मीद कर रहा हूं ... मेरी समस्या पाइथन 2 बनाम 3 से थी। मैं विशेष रूप से पायथन 3 का उपयोग कर रहा हूं; और कोई विरासत नहीं पायथन। लेकिन मेरे OS (जैसे, Ubuntu 16.04) में अभी भी पायथन 2.7 स्थापित है। इस प्रकार जब pipडिफ़ॉल्ट रूप से वैश्विक चल रहा है (उदाहरण के लिए, वर्चुअन में नहीं), मैं पायथन 2 के संस्करण को कॉल कर रहा था pip

मेरे लिए, मैंने इस समस्या को ठीक करने के लिए निम्नलिखित का उपयोग किया।

स्थापना रद्द करें docker-compose:

sudo pip3 uninstall docker-compose  
sudo pip uninstall docker-compose

docker-composeपायथन के मेरे संस्करण के लिए पुनर्स्थापित करें :

sudo pip3 install docker-compose

0

मैं OSX 10.15.5 कैटालिना चला रहा हूं और pyenv का उपयोग कर रहा हूं।

इस पृष्ठ पर कई अन्य समाधानों की कोशिश करने से जो मेरे लिए काम करते हैं:

pyenv uninstall 3.6.8
pyenv install 3.6.8

मुझे स्वीकार करना होगा कि मुझे यकीन नहीं है कि इसने इस मुद्दे को क्यों हल किया, क्योंकि मैंने केवल हाल ही में पायथन के इस संस्करण को स्थापित किया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.