J'ai essayé de mettre à jour pip, et lorsque j'ai exécuté la commande, je n'ai pas pu mettre à jour car ssl ne fonctionnait pas.
Il s'est avéré qu'en raison de la mise à niveau, je n'ai pas pu trouver la bibliothèque openssl qui se trouvait lorsque j'ai installé python. Cette fois, l'ancienne version d'openssl est restée, donc j'ai pu le résoudre en utilisant install_name_tool pour me dire l'emplacement de la bibliothèque partagée ou en recollant le lien symbolique.
J'ai essayé de mettre à jour pip, et quand j'ai exécuté la commande, j'ai eu une erreur disant que ssl ne fonctionnait pas et ne pouvait pas mettre à jour.
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
Lorsque j'ai essayé d'importer ssl à partir du shell python, j'ai eu une erreur indiquant que la bibliothèque était introuvable.
>>> 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
Il semble que la bibliothèque dynamique /Users/hoge/.pyenv/versions/3.6.3/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so soit foirée, donc cela dépend d'otool. J'ai vérifié la bibliothèque. En conséquence, il a été constaté qu'openssl nécessite la version 1.0.0 de la bibliothèque.
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)
Cependant, le répertoire (/ usr / local / opt / openssl / lib) qui devrait contenir la bibliothèque 1.0.0 contenait 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
Cela signifie que 1.0.0 est manquant et que vous obtenez une erreur, vous devez donc trouver openssl.
Quand je l'ai cherché, il semble que openssl (ver1.0.0) était toujours sur le mac, j'ai donc décidé de vous indiquer le répertoire où se trouve 1.0.0.
J'ai réécrit l'emplacement des deux bibliothèques dépendantes libssl.1.0.0.dylib et libcrypto.1.0.0.dylib qui sont apparues lorsque j'ai exécuté otool à l'emplacement correct en utilisant install_name_tool.
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)
Même si vous n'utilisez pas install_name_tool, vous pouvez le corriger en rétablissant le lien symbolique et en pointant vers 1.0.0.
ln -nfs /usr/local/Cellar/openssl/1.0.2s/ /usr/local/opt/openssl
Vous pouvez importer SSL en prenant la solution de contournement 1 ou 2, et pip J'ai pu mettre à jour.
Recommended Posts