Ich habe versucht, pip zu aktualisieren, und als ich den Befehl ausführte, konnte ich nicht aktualisieren, da ssl nicht funktionierte.
Es stellte sich heraus, dass ich aufgrund des Upgrades die openssl-Bibliothek, in der ich Python installiert hatte, nicht finden konnte. Diesmal blieb die alte Version von openssl erhalten, sodass ich sie lösen konnte, indem ich install_name_tool verwendete, um mir den Speicherort der gemeinsam genutzten Bibliothek mitzuteilen oder den symbolischen Link erneut einzufügen.
Ich habe versucht, pip zu aktualisieren, und als ich den Befehl ausführte, wurde die Fehlermeldung angezeigt, dass ssl nicht funktioniert und nicht aktualisiert werden konnte.
hoge-Macbook:~ hoge$ pip install -U pip
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
Requirement already up-to-date: pip in ./.pyenv/versions/3.6.3/lib/python3.6/site-packages (19.3.1)
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
Als ich versuchte, ssl aus der Python-Shell zu importieren, wurde die Fehlermeldung angezeigt, dass die Bibliothek nicht gefunden wurde.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/ssl.py", line 101, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: dlopen(/Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so
Reason: image not found
Es scheint, dass die dynamische Bibliothek /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so durcheinander ist, also hängt es von otool ab. Ich habe die Bibliothek überprüft. Als Ergebnis wurde festgestellt, dass openssl Version 1.0.0 der Bibliothek benötigt.
hoge-Macbook:Users hoge$ otool -L /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so
/Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so:
/usr/local/opt/openssl/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
Das Verzeichnis (/ usr / local / opt / openssl / lib), das die Bibliothek 1.0.0 enthalten sollte, enthielt jedoch 1.1.
hoge-Macbook:Users hoge$ ls /usr/local/opt/openssl/lib
engines-1.1 libcrypto.a libssl.1.1.dylib libssl.dylib
libcrypto.1.1.dylib libcrypto.dylib libssl.a pkgconfig
ls -l /usr/local/opt/
lrwxr-xr-x 1 hoge admin 28 4 29 12:41 openssl -> ../Cellar/[email protected]/1.1.1f
Dies bedeutet, dass 1.0.0 fehlt und Sie eine Fehlermeldung erhalten, sodass Sie openssl finden müssen.
Als ich danach gesucht habe, scheint es, dass openssl (Version 1.0.0) immer noch auf dem Mac verbleibt. Deshalb habe ich beschlossen, Ihnen das Verzeichnis mitzuteilen, in dem sich 1.0.0 befindet.
Ich habe den Speicherort der beiden abhängigen Bibliotheken libssl.1.0.0.dylib und libcrypto.1.0.0.dylib neu geschrieben, die beim Ausführen von otool an den richtigen Speicherort mit install_name_tool angezeigt wurden.
install_name_tool -change /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so
install_name_tool -change /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so
hoge-Macbook:procon hoge$ otool -L /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so
/Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so:
/usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
Auch wenn Sie install_name_tool nicht verwenden, können Sie das Problem beheben, indem Sie die symbolische Verknüpfung wiederherstellen und auf 1.0.0 zeigen.
ln -nfs /usr/local/Cellar/openssl/1.0.2s/ /usr/local/opt/openssl
Sie können ssl importieren, indem Sie entweder 1 oder 2 Workaround und pip verwenden Ich konnte aktualisieren.
Recommended Posts