La construction Python 3.7 à partir de la source rencontre l'erreur suivante:
Failed to build these modules:
_hashlib _ssl
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_Host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381
J'ai essayé tant de solutions de contournement à partir d'autres questions stackoverflow, mais cela ne fonctionne pas. Je construis les plus récents OpenSSL et LibreSSL à partir des sources. Le chemin OpenSSL est: "/ usr/local/ssl" avec la version OpenSSL 1.0.2p.
./configure --with-openssl=/usr/local/ssl/
(./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib")
make
make altinstall
Mon système: Ubuntu 12.04.5 LTS
Des idées?
Bien que ce ne soit peut-être pas la meilleure réponse, je partagerai comment j'ai résolu ce problème.
Tout d'abord, dans mon cas, OpenSSL ne s'est pas construit correctement, car make test
a renvoyé des erreurs (et par conséquent Python a donné cette erreur). Cela a été résolu en installant une version plus récente de Perl et en réinstallant OpenSSL (configure, make, etc.).
Utilisez cette commande avant d'utiliser ./configure
export LD_LIBRARY_PATH =/chemin/vers/openssl/lib: $ LD_LIBRARY_PATH
À la commande configure, incluez la bibliothèque:
LDFLAGS = "- L/path/to/openssl/lib" ./configure (toutes vos options préférées) --with-openssl =/path/to/openssl
car apparemment, l'option de configuration ne transmet pas le message au compilateur C qui en a besoin.
Je ne sais pas si les options 2 et 3 sont nécessaires simultanément, mais je l'ai fait et cela a fonctionné.
C'est ce que j'ai fait pour que ça marche
brew reinstall openssl
brew unlink openssl && brew link openssl --force
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
Ensuite, téléchargez votre python tarball et faites-le
tar xvf Python-3.7.2.tar
cd Python-3.7.2
./configure CPPFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" --prefix=$PWD/Python-3.7.2/mybuild --enable-optimizations
Modifier setup.py
Trouvez les lignes suivantes:
system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
system_include_dirs = ['/usr/include']
... et placez chaque dossier au début de sa liste respective.
Dans mon cas, j'ai dû ajouter: /usr/local/lib
et /usr/local/include
:
system_lib_dirs = ['/usr/local/lib', '/lib64', '/usr/lib64', '/lib', '/usr/lib']
system_include_dirs = ['/usr/local/include', '/usr/include']
Finalement: make distclean && ./configure
Vous pouvez vous assurer que export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
(ou ce que vous avez) est ajouté à la fin de /etc/profile
et redémarrez également.
Je l'ai résolu après 3 jours seulement à cause de ce blog. avec python 3.7.4 openssl 1.1.0 centOS 6.
voici le résumé:
Tout d'abord, certaines conditions préalables:
Sudo apt-get install build-essential checkinstall libreadline-gplv2-dev libncursesw5-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
utilisez yum au lieu d'apt-get si vous utilisez centos linux.
Installez ssl 1.0.2 ou supérieur.
cd /usr/src
curl https://www.openssl.org/source/openssl-1.0.2o.tar.gz | tar xz
cd openssl-1.0.2o
./config shared --prefix=/usr/local/
Sudo make
Sudo make install
Nous devrons passer /usr/src/openssl-1.0.2o dans le script de configuration Python.
mkdir lib
cp ./*.{so,so.1.0.0,a,pc} ./lib
Maintenant, procédez à l'installation de Python:
cd /usr/src
Sudo wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
Sudo tar xzf Python-3.7.0.tgz
cd Python-3.7.0
./configure --with-openssl=/usr/src/openssl-1.0.2o --enable-optimizations
Sudo make
Sudo make altinstall
Pour le tester, exécutez python3.7 et saisissez:
import ssl
ssl.OPENSSL_VERSION
J'espère que ça aide!