web-dev-qa-db-fra.com

Construction Python 3.7.1 - Le module SSL a échoué

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?

10
mcatis

Bien que ce ne soit peut-être pas la meilleure réponse, je partagerai comment j'ai résolu ce problème.

  1. 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.).

  2. Utilisez cette commande avant d'utiliser ./configure

    export LD_LIBRARY_PATH =/chemin/vers/openssl/lib: $ LD_LIBRARY_PATH

  3. À 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é.

3
Simon Klaver

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
0
Jagat

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.

0
veganaiZe

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!

0
Sunil Kumar