Python script saya gagal dengan:
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'
Upgrade pyopenssl
dengan pip tidak bekerja karena tidak ada perintah yang terkait dengan pip
bekerja untuk saya. Dengan meng-upgrade pyopenssl
dengan easy_install
, masalah di atas dapat diselesaikan.
sudo python -m easy_install --upgrade pyOpenSSL
kredit @pembatas (Jawaban)
Aku punya kesalahan yang sama:
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'
dan tidak ada jawaban yang lain bisa memperbaikinya, karena pip tidak bisa menginstal apa-apa. Sebaliknya, apa yang saya lakukan adalah ini dari terminal pertama:
sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL
Kemudian diinstal ulang pyopenssl dengan pip:
sudo pip install pyopenssl
dan semuanya saus.
Saya mengalami masalah yang sama baru-baru ini dan setelah beberapa jam investigasi, saya menemukan bahwa hal itu disebabkan oleh New kriptografi 2.0 meng-upgrade. Upgrade ini akan memecahkan banyak paket yang menggunakan pyopenssl (seperti Sentry, Google Analytics dan lain-lain). Hanya downgrade ke 1,9 akan memecahkan masalah.
Berhati-hati jika anda menggunakan "pip install-U", maka secara otomatis akan meng-upgrade paket yang tidak tercantum dalam requirements.txt.
Dalam kasus saya, masalahnya adalah bahwa paket itu dipasang di root direktori, dan saya mengeksekusi script yang meminta pyopenssl
dengan saya pengguna Linux forvas. Dan bahwa pengguna dapat't menggunakan perpustakaan diinstal di root.
Jadi pertama aku harus menghapus paket dengan bakat
atau apt-get
.
sudo aptitude purge python-openssl
Oleh karena itu, saya harus menginstal paket lagi, tetapi mengambil ke account pengguna yang mengeksekusi script yang meminta untuk perpustakaan. Lihatlah ke mana perpustakaan dipasang tergantung pada pengguna Linux dan argumen - pengguna
dari pip
.
Kasus 1
forvas@server:$ pip install pyopenssl
tidak Bisa menginstal paket-paket karena EnvironmentError:
[Errno 13] Izin ditolak: '/usr/local/lib/python2.7/dist-paket/OpenSSL'
Pertimbangkan untuk menggunakan
--pengguna
pilihan atau periksa izin.
Kasus 2
forvas@server:$ sudo pip install pyopenssl
/usr/local/lib/python2.7/dist-paket/OpenSSL/*
/usr/local/lib/python2.7/dist-paket/pyOpenSSL-17.5.0.dist-info/*
Kasus 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/*
Kasus 4
root@server:$ pip install pyopenssl
/usr/local/lib/python2.7/dist-paket/OpenSSL/*
/usr/local/lib/python2.7/dist-paket/pyOpenSSL-17.5.0.dist-info/*
Kasus 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/*
Kesimpulan
Masalah saya adalah bahwa perpustakaan itu dipasang di direktori kasus 5.
Solusi
Menghapus instalasi paket.
Seperti yang saya'm mengeksekusi script dengan pengguna Linux forvas, saya bisa menginstal paket yang tepat dengan pilihan 2 atau 4 (di mana perpustakaan ini tersedia untuk semua pengguna Linux) atau lebih akurat, pilihan 3 (di mana perpustakaan ini hanya tersedia untuk pengguna Linux forvas).
Saya memiliki masalah yang sama dan sebagai pip itu't bekerja lagi saya harus melakukan pekerjaannya secara manual:
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
Setelah itu semuanya berjalan seperti yang diharapkan.
Masalah saya adalah disebabkan oleh versi Python openssl yang berada di /usr/lib/python2.7/dist-paket/
.
dpkg -l | grep openssl
menunjukkan:
ii python-openssl 0.15.1-2build1 all Python 2 wrapper around the OpenSSL library
Saya dihapus menggunakan sudo apt-get remove python-openssl
. Aku kemudian berlari berikut untuk menginstal versi distribusi pip.
curl -o ./get-pip.py https://bootstrap.pypa.io/get-pip.py
sudo python2 ./get-pip.py
pip --versi
sekarang menampilkan:
pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
Kemudian saya mampu untuk melakukan itu perlu pip menginstal aku mencoba untuk menyelesaikan.
Aku punya masalah ini di MacOS dengan python 2 dan 3 dipasang melalui minuman. Ternyata `minuman uninstall a'ing python dan python@2 tidak menghapus setiap perpustakaan yang dipasang untuk versi python; yaitu di:
/usr/local/lib/python3.7/site-packages/
dan
/usr/local/lib/python2.7/site-packages/
Sesuatu di sana yang tidak benar, sehingga apa yang bekerja untuk saya adalah untuk menghapus/memindahkan semua diinstal perpustakaan untuk minuman's python 2 dan 3 dan mulai lagi (dan pastikan hanya menggunakan virtualenvs dari sini):
minuman uninstall --ignore-dependensi python@2 minuman uninstall --ignore-dependensi 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
Aku punya masalah yang sama di Ubuntu 16.04, tapi dengan mengikuti twist: ketika virtualenv diaktifkan (. venv/bin/mengaktifkan
sebelum menjalankan seledri pekerja dengan pysolr, permintaan, dll dalam kasus saya) - semuanya bekerja dengan sempurna, tapi ketika aku berlari seledri dari baris perintah dengan menggunakan full path, dan python path - ada masalah (dan masalah yang sama berjalan dari supervisord ). Juga, jika penting, virtualenv telah dibundel di tempat lain pada mesin yang sama dengan Ubuntu versi.
Solusinya sangat sederhana: menambahkan /full/path/to/venv/bin
untuk JALAN ( seperti yang disarankan di sini https://serverfault.com/questions/331027/supervisord-how-to-append-to-path ) soal ini.
Sayangnya, saya belum pin-menunjuk apa jenis update yang menyebabkan ini, tapi mudah-mudahan hal ini dapat membantu seseorang.
Hanya dalam kasus orang lain isn't menemukan yang tepat mantra untuk membuat karya ini, sebagai Nov 2018 hal yang bekerja untuk saya adalah:
sudo rm -rf /usr/local/lib/python2.7/dist-paket/OpenSSL/ sudo apt-get install --reinstall python-openssl
Good luck!
Saya baru saja mengalami hal ini pada saya Ubuntu 16.04 tuan rumah. Tampaknya ada versi konflik antara apt repo paket python-openssl dan python-crypotgraphy, lebih baik dari apa yang seseorang diinstal secara manual dengan pip ke /usr/local/python2.7/dist-paket.
Setelah itu masuk ke negara ini, sistem standar pip tidak't mengeksekusi, baik. Aku punya sekitar ayam-dan-telur masalah dengan pengaturan secara manual yang PYTHONPATH variabel lingkungan yang dikecualikan /usr/local bagian dari pohon thusly:
$ 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
Saya daftar di atas dari direktori perpustakaan yang digunakan dengan python shell:
import sys
for p in sys.path:
print(p)
dan kemudian menyalin segala sesuatu yang tercantum kecuali satu /usr/local directory. Sistem anda mungkin memiliki daftar yang berbeda di jalan. Menyesuaikan sesuai.
Saya juga punya beberapa manual apt-get install --reinstall python-openssl python-kriptografi
perintah tersebar di bash history, yang mungkin atau mungkin tidak diperlukan.
Coba dengan:
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
Solusi saya adalah jauh lebih sederhana setelah ini solusi lain tidak bekerja untuk saya. Apa-apa saya mencoba untuk install/uninstall melalui pip kembali kesalahan yang sama dan stacktrace.
Akhirnya saya mencoba untuk update pip melalui pip3 dan itu bekerja dengan sempurna:
pip3 menginstal-upgrade pip
Aku kembali untuk menggunakan pip dan semuanya bekerja dengan benar. Aku tidak menyadari bahwa itu adalah referensi Python 3.6 ketika menjalankan pip perintah sekalipun.
# 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)
Dalam kasus saya, Itu melemparkan kesalahan yang sama untuk menghapus instalasi dan upgrade. Saya tidak't uninstall atau meng-upgrade.
AttributeError: 'modul' objek memiliki atribut 'SSL_ST_INIT'
Berikut bekerja untuk saya.
# 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
PERINGATAN: Mencoba ini hanya jika upgrade(sudo pip install pyOpenSSL==16.2.0
) atau menghapus(pip uninstall pyopenssl
) doesn't membantu
Aku melihat mirip python tumpukan sampah di konsol saya Ubuntu 16.04 VM ketika saya mencoba ssh ke VM.
SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
pip
melaporkan bahwa pyopenssl
tidak diinstal.
Aku harus melakukan ini sebagai gantinya:
sudo apt install --reinstall python-openssl