web-dev-qa-db-fra.com

Python Erreur de build: échec de construction des modules _ssl et _hashlib

J'ajoute python 2.7.13 comme altinstall en installant le code source sur ma boîte RHEL4 avec

wget --no-check-certificate https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
tar -xvzf Python2.7.13.tar.xz
cd Python2.7.13
./configure --with-ensurepip=install
make
make test
make altinstall

afin que je n'écrase pas le défaut python qui est requis pour une autre utilisation. Python 2.7.13 s'installerait avec succès mais manquait plusieurs modules essentiels pour le projet) Je travaille.

À l'origine, les modules _ssl et _haslib comportaient des erreurs dans cette section.

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

J'ai installé openssl et je me suis assuré qu'ils se trouvaient à l'emplacement par défaut qui python les cherchait, alors maintenant j'ai les bits nécessaires mais ça se termine par ce message à la place

Failed to build these modules:
_hashlib           _ssl

Vous trouverez ci-dessous l'intégralité de la sortie du python2.7 setup.py build à partir du package décompressé python. J'ai parcouru Google et partout où je peux trouver, mais je n'ai rien réussi jusqu'à présent

running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers
building '_ssl' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_ssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o
/Python/Modules/_ssl.c:57: warning: ignoring #pragma GCC diagnostic
/Python/Modules/_ssl.c: In function ‘_setup_ssl_threads’:
/Python/Modules/_ssl.c:4012: warning: comparison is always false due to limited range of data type
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_ssl.so
/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
building '_hashlib' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_hashopenssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_hashlib.so
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(o_names.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_hashlib           _ssl

 running build_scripts

Lorsque j'essaie d'utiliser pip installé avec mon python 2.7.13, j'obtiens une erreur SSL, donc j'ai installé tous mes packages et autres modules à partir de la source comme cx_Oracle et CherryPy.

pip2.7 install cffi
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting cffi
  Could not fetch URL https://pypi.python.org/simple/cffi/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
  Could not find a version that satisfies the requirement cffi (from versions: )
No matching distribution found for cffi

J'ai également essayé d'ajouter manuellement le module ssl avec

wget --no-check-certificate https://pypi.python.org/packages/83/21/f469c9923235f8c36d5fd5334ed11e2681abad7e0032c5aba964dcaf9bbb/ssl-1.16.tar.gz#md5=fb12d335d56f3c8c7c1fefc1c06c4bfb
tar -xvzf ssl-1.16.tar.gz
cd ssl-1.16
python2.7 setup.py build

Mais je reçois une erreur indiquant qu'il ne doit pas être utilisé avec python past 2.6

Traceback (most recent call last):
  File "setup.py", line 12, in <module>
    + "or earlier.")
ValueError: This extension should not be used with Python 2.6 or later (already built in), and has not been tested with Python 2.3.4 or earlier.

[~ # ~] modifier [~ # ~]

Je cherchais des solutions et après avoir passé au peigne fin les sorties du setup.py build et j'ai trouvé quelqu'un avec un problème similaire qui semble être lié à openssl ici donc j'ai reconstruit mon openssl avec

./config enable-shared
make
make test
make install

et maintenant j'obtiens une erreur légèrement différente à propos du module ssl, suis-je en train de bousiller mon environnement de plus en plus?

python2.7 setup.py build
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers
building '_ssl' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_ssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o
/Python/Modules/_ssl.c:57: warning: ignoring #pragma GCC diagnostic
/Python/Modules/_ssl.c: In function ‘_setup_ssl_threads’:
/Python/Modules/_ssl.c:4012: warning: comparison is always false due to limited range of data type
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory
building '_hashlib' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_hashopenssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_hashlib.so
*** WARNING: renaming "_hashlib" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_hashlib           _ssl

running build_scripts

Le nouveau message d'avertissement dans la sortie *** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory indique que le fichier n'existe pas mais je le vois dans/usr/local/ssl/lib/comme libssl.so.1.0.0 et je peux le trouver avec une recherche

find / -name libssl.so.1.0.0
/usr/local/ssl/lib/libssl.so.1.0.0
/tmp/openssl-1.0.2l/libssl.so.1.0.0
10
stephen

Eh bien, je ne sais pas si je dois me sentir stupide et c'est juste une chose courante que j'ai complètement ignoré, car je suis relativement nouveau sur Linux CLI. Mais, j'ai pu résoudre mon erreur de génération pour les modules _hashlib et _ssl en quelques étapes simples dans https://stackoverflow.com/a/28460293/8222554 la réponse d'Amo.

J'ai d'abord tenté le ldconfig mais cela n'a pas résolu mon problème, j'ai donc simplement regardé ce qu'il y avait dans mon LD_LIBRARY_PATH avec

echo $LD_LIBRARY_PATH

puis récupéré ces emplacements qui n'incluaient pas où se trouvait le fichier libssl.so.1.0.0

/usr/lib/Oracle/11.2/client64/lib:/usr/lib/Oracle/11.2/client/lib

Ensuite, j'ai suivi les étapes que j'avais faites précédemment lors de l'installation du client instantané Oracle et du module cx_Oracle qui étaient facilement présentés sur ce billet de blog: https://ubuntugeeknerd.blogspot.com/2013/08/how-to -install-oxoracle-in-rhel-64-bit.html

Ces étapes que j'ai utilisées pour le module ssl étaient les suivantes

export LD_LIBRARY_PATH=/usr/local/ssl/lib/:$LD_LIBRARY_PATH >> ~/.bashrc
echo $LD_LIBRARY_PATH
/usr/local/ssl/lib/:/usr/lib/Oracle/11.2/client64/lib:/usr/lib/Oracle/11.2/client/lib

Après cela, j'ai fait python2.7 setup.py clean suivi par python2.7 setup.py build enfin python2.7 setup.py install. La sortie n'a retourné aucun échec de construction en plus de ceux pour lesquels je n'avais pas les bits nécessaires (et je ne cherchais pas à construire de toute façon).

Je peux vérifier que le module ssl est là maintenant lors de l'ouverture de python et de l'importation du module avec succès

Python 2.7.13 (default, Jun 26 2017, 15:21:33)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>

J'espère que cela sera pratique pour quelqu'un qui rencontre un problème similaire

7
stephen