Python构建错误:无法构建模块_ssl和_hashlib

ste*_*hen 9 python ssl pip rhel python-2.7

我通过将源代码安装到我的RHEL4框中来添加python 2.7.13作为altinstall

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
Run Code Online (Sandbox Code Playgroud)

所以我不会覆盖其他用途所需的默认python.Python 2.7.13将成功安装但缺少我正在处理的项目的几个基本模块.

最初,_ssl和_haslib模块在本节中会出错.

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.
Run Code Online (Sandbox Code Playgroud)

我安装了openssl并确保它们位于python正在寻找它们的默认位置,所以现在我有必要的位但是它以此消息结束

Failed to build these modules:
_hashlib           _ssl
Run Code Online (Sandbox Code Playgroud)

下面是解python2.7 setup.py build压缩的python包的整个输出.我一直在搜索谷歌和我能找到的任何地方,但到目前为止,我一直没有成功

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
Run Code Online (Sandbox Code Playgroud)

当我尝试使用与我的python 2.7.13一起安装的pip时,我收到了SSL错误,因此我一直在安装我的所有软件包和其他模块,如cx_Oracle和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
Run Code Online (Sandbox Code Playgroud)

我还尝试手动添加ssl模块

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
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,它不应该用于2.6以上的python

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.
Run Code Online (Sandbox Code Playgroud)

编辑

我四周寻找解决方案,并在的输出梳理后setup.py build,发现有人用类似十岁上下的问题,似乎OpenSSL的是相关这里 所以我重建用的OpenSSL

./config enable-shared
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

现在我对ssl模块的错误略有不同,我只是越来越多地搞砸了我的环境?

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
Run Code Online (Sandbox Code Playgroud)

输出中的新警告消息*** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory表明该文件不存在但我在/ usr/local/ssl/lib /中看到它作为libssl.so.1.0.0并且可以通过搜索找到它

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
Run Code Online (Sandbox Code Playgroud)

ste*_*hen 7

好吧,我不知道是否觉得愚蠢,这只是我完全忽略的常见事情,因为我对linux CLI相当新.但是,我能够通过/sf/answers/1992220541/ amo的响应中的几个简单步骤解决_hashlib和_ssl模块的构建错误.

我首先尝试了ldconfig但是没有解决我的问题所以我只是看看我的LD_LIBRARY_PATH中的内容

echo $LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

然后找回这些不包含libssl.so.1.0.0文件所在位置的位置

/usr/lib/oracle/11.2/client64/lib:/usr/lib/oracle/11.2/client/lib
Run Code Online (Sandbox Code Playgroud)

然后我按照我之前在安装Oracle即时客户端和cx_Oracle模块时所做的步骤进行了操作,这些模块很容易在这篇博客文章中列出:https://ubuntugeeknerd.blogspot.com/2013/08/how-to-install-oxoracle -in-RHEL-64 bit.html

我用于ssl模块的步骤如下

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
Run Code Online (Sandbox Code Playgroud)

在此之后我做python2.7 setup.py cleanpython2.7 setup.py build最后一次python2.7 setup.py install.输出没有返回任何失败的构建除了我没有必要的位(并且不打算构建反正).

我可以在打开python并成功导入模块时验证ssl模块是否存在

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
>>>
Run Code Online (Sandbox Code Playgroud)

希望这对于遇到类似问题的人来说会很方便