Mój skrypt w Pythonie zawodzi:
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
Uruchamiam w tym problemie z debian-jessie, zaktualizowany pakiet (16.0.0-1 ~ bpo8 + 1) z jessie-backports też nie działa, więc muszę go zaktualizować za pomocą pip zgodnie z poniższymi rozwiązaniami (używana wersja to 18.0 .0)Odpowiedzi:
Aktualizacja za
pyopenssl
pomocą pip nie działała, ponieważ żadne z poleceń związanych z programem nie działałopip
. Poprzez aktualizację zapyopenssl
pomocąeasy_install
powyższego problemu można rozwiązać.Credit @delimiter ( odpowiedź )
źródło
pip
dobrze.AttributeError
OP.Okazało się, że problem dotyczył mojej instalacji pyOpenSSL, pyOpenSSL-0.15.1.
Zrobiłem:
i wtedy
... i mój skrypt w Pythonie znów zadziałał!
źródło
pip
się, to rozwiązało problemsudo easy_install pyOpenSSL
sudo aptitude purge python-openssl
ponieważ został zainstalowany zaptitude
. Myślę, że mógłbym zrobić to samo zapt-get
pip
. Tak też zrobiłrm -rf cryptography
i mógł ponownie uruchomić pip.Zaktualizuj swój
pyopenssl
moduł:źródło
Miałem podobny błąd:
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'
i żadna z pozostałych odpowiedzi nie mogła tego naprawić, ponieważ pip nie mógł niczego zainstalować. Zamiast tego zrobiłem to najpierw z terminala:
sudo rm -r /usr/local/lib/python3.5/dist-packages/OpenSSL
Następnie ponownie zainstalowałem pyopenssl za pomocą pip:
i wszystko było w sosie.
źródło
rm -r ~/.virtualenvs/YourEnv/local/lib/python3.6/site-packages/OpenSSL
Spróbuj, używając następujących poleceń:
źródło
Niedawno doświadczyłem tego samego problemu i po kilku godzinach badania stwierdziłem, że jest to spowodowane aktualizacją nowej kryptografii 2.0 . Ta aktualizacja zepsuje wiele pakietów używających pyopenssl (takich jak Sentry, Google Analytics itp.). Wystarczy obniżyć go do 1,9, aby rozwiązać problem.
Zachowaj ostrożność, jeśli używasz "pip install -U", automatycznie zaktualizuje pakiety, które nie są wymienione w Requirements.txt.
źródło
W moim przypadku problem polegał na tym, że pakiet został zainstalowany w katalogach root , a ja wykonywałem skrypt, o który prosił
pyopenssl
mój użytkownik Linuksa forvas . A ten użytkownik nie może korzystać z bibliotek zainstalowanych na koncie root.Więc najpierw musiałem usunąć pakiet za pomocą
aptitude
lubapt-get
.Dlatego musiałem ponownie zainstalować pakiet, ale biorąc pod uwagę użytkownika, który wykonuje skrypt, który pyta o bibliotekę. Spójrz na którym zainstalowana jest biblioteka w zależności od użytkownikiem Linuksa i argument
--user
opip
.Przypadek 1
Przypadek 2
Przypadek 3
Przypadek 4
Przypadek 5
Wniosek
Mój problem polegał na tym, że biblioteka została zainstalowana w katalogach sprawy 5 .
Rozwiązanie
Odinstalowanie pakietu.
Ponieważ wykonuję skrypt z użytkownikiem Linuksa forvas , udało mi się poprawnie ponownie zainstalować pakiet z opcjami 2 lub 4 (w których biblioteka jest dostępna dla wszystkich użytkowników Linuksa) lub dokładniej, opcja 3 (w której biblioteka jest dostępne tylko dla użytkowników Linuksa forvas ).
źródło
sudo python3 -m pip install --user pyopenssl
, a pakiety byłyby przechowywane w plikach/home/forvas/.local/lib/python3.6/site-packages
.Miałem ten sam problem i ponieważ pip już nie działał, musiałem wykonać swoją pracę ręcznie:
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
Potem wszystko działało zgodnie z oczekiwaniami.
źródło
Mój problem był spowodowany wersją Pythona openssl, która była w
/usr/lib/python2.7/dist-packages/
.dpkg -l | grep openssl
pokazał:ii python-openssl 0.15.1-2build1 all Python 2 wrapper around the OpenSSL library
Usunąłem go za pomocą
sudo apt-get remove python-openssl
. Następnie uruchomiłem poniższe, aby zainstalować wersję dystrybucyjną pip.pip --version
teraz wyświetla:pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
Byłem wtedy w stanie wykonać niezbędną instalację pip, którą próbowałem ukończyć.
źródło
To zadziałało dla mnie:
źródło
Widziałem też
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
błąd.Robić
sudo pip install pyOpenSSL==16.2.0
rozwiązałem to za mnie.
źródło
Na wypadek, gdyby ktoś inny nie znalazł dokładnie odpowiednich zaklęć, aby to zadziałało, od listopada 2018 r. Działało dla mnie:
sudo rm -rf /usr/local/lib/python2.7/dist-packages/OpenSSL/ sudo apt install --reinstall python-openssl
Powodzenia!
źródło
Miałem ten problem na MacOS z pythonem 2 i 3 zainstalowanym przez brew. Okazuje się, że
brew uninstall
ing python i python @ 2 nie usuwa żadnych bibliotek, które zostały zainstalowane dla tych wersji pythona; czyli w:/usr/local/lib/python3.7/site-packages/
i/usr/local/lib/python2.7/site-packages/
Coś tam było nie tak, więc to, co zadziałało, to usunięcie / przeniesienie wszystkich zainstalowanych bibliotek dla Pythona 2 i 3 brew i rozpoczęcie od nowa (i upewniam się, że od tej pory używam tylko 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
źródło
W moim przypadku wyrzucał ten sam błąd przy odinstalowywaniu i uaktualnianiu. Nie mogłem odinstalować ani zaktualizować.
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
Następujące pracowały dla mnie.
# 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
OSTRZEŻENIE : Spróbuj tego tylko wtedy, gdy aktualizacja (
sudo pip install pyOpenSSL==16.2.0
) lub odinstalowanie (pip uninstall pyopenssl
) nie pomagaźródło
Miałem ten sam problem na Ubuntu 16.04, ale z następującym zwrotem akcji: kiedy virtualenv został aktywowany (
. venv/bin/activate
przed uruchomieniem robotników selera z pysolrem, żądaniami itp. W moim przypadku) - wszystko działało idealnie, ale kiedy uruchomiłem selera z linii poleceń używając pełnych ścieżek i ścieżki Pythona - wystąpił problem (i ten sam problem podczas uruchamiania z programu supervisord). Ponadto, jeśli jest to ważne, virtualenv został dołączony w innym miejscu na maszynie z tą samą wersją Ubuntu.Rozwiązanie było proste: dodanie
/full/path/to/venv/bin
do PATH (zgodnie z zaleceniami tutaj /server/331027/supervisord-how-to-append-to-path ) rozwiązało ten problem.Niestety nie wskazałem jeszcze, jakiego rodzaju aktualizacja to spowodowała, ale mam nadzieję, że może to komuś pomóc.
źródło
Właśnie spotkałem się z tym na moim hoście Ubuntu 16.04. Wygląda na to, że istnieje konflikt wersji między pakietami apt repo dla python-openssl i python-crypotgraphy, a tym, co ktoś zainstalował ręcznie za pomocą pip do /usr/local/python2.7/dist-packages.
Gdy wszedł w ten stan, standardowy pip systemowy również nie mógł wykonać. Poradziłem sobie z problemem jajka i jajka, ręcznie ustawiając zmienną środowiskową PYTHONPATH, która wyklucza / usr / lokalną część drzewa w ten sposób:
$ 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
Otrzymałem powyższą listę katalogów bibliotecznych do użycia z powłoką Pythona:
import sys for p in sys.path: print(p)
a następnie skopiowanie wszystkiego, co wymienione z wyjątkiem jednego katalogu / usr / local. Twój system może mieć inną listę na swojej ścieżce. Odpowiednio wyreguluj.
Miałem też kilka ręcznych
apt-get install --reinstall python-openssl python-cryptography
poleceń rozproszonych w mojej historii basha, co mogło być konieczne lub nie.źródło
Moje rozwiązanie było znacznie bardziej uproszczone po tym, jak te inne rozwiązania nie działały dla mnie. Wszystko, co próbowałem zainstalować / odinstalować przez pip, zwróciło ten sam błąd i śledzenie stosu.
Skończyło się na tym, że próbowałem zaktualizować pip przez pip3 i działało bezbłędnie:
pip3 install --upgrade pip
Wróciłem do używania pip i wszystko działało poprawnie. Zauważyłem jednak, że odwoływał się do Pythona 3.6 podczas uruchamiania poleceń pip.
# 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)
źródło
Spróbuj z:
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
źródło
Widziałem podobny zrzut stosu Pythona na konsoli mojej maszyny wirtualnej Ubuntu 16.04, kiedy próbowałem ssh na maszynie wirtualnej.
SSL_ST_INIT = _lib.SSL_ST_INIT AttributeError: 'module' object has no attribute 'SSL_ST_INIT'
pip
zgłosił, żepyopenssl
nie został zainstalowany.Zamiast tego musiałem to zrobić:
źródło
To jest starszy post, więc odpowiadam, mam nadzieję, że pomogę komuś pod koniec 2019 roku ... mój problem dotyczył Pythona 2 vs 3. Używam wyłącznie Pythona 3; koniec ze starszym Pythonem. Ale mój system operacyjny (np. Ubuntu 16.04) nadal ma zainstalowany Python 2.7. Tak więc, gdy
pip
domyślnie działam globalnie (np. Nie w virtualenv), wywoływałem wersję Pythona 2 programupip
.Dla mnie użyłem następujących, aby rozwiązać ten problem.
Odinstaluj
docker-compose
:Zainstaluj ponownie
docker-compose
dla mojej wersji Pythona:źródło
Używam systemu OSX 10.15.5 Catalina i używam pyenv.
Po wypróbowaniu wielu innych rozwiązań na tej stronie, co zadziałało, to:
pyenv uninstall 3.6.8 pyenv install 3.6.8
Muszę przyznać, że nie jestem pewien, dlaczego to rozwiązało ten problem, ponieważ dopiero niedawno zainstalowałem tę wersję Pythona.
źródło