我试图在RHEL上编译python,因为我当前的python使用的是旧的1.0.2k ssl版本。
(test_env) [brad@reason tlscheck]$ python3 --version
Python 3.9.3
(test_env) [brad@reason tlscheck]$ python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2k-fips 26 Jan 2017
(test_env) [brad@reason tlscheck]$ openssl version
OpenSSL 1.1.1l 24 Aug 2021
我认为问题是当我编译3.9.3时,我没有更新我的OpenSSL版本。我后来更新了我的OpenSSL,需要在python中使用它。所以我下载了最新的python 3.10,但是在make阶段我得到了一个错误,它不会在ssl中出现。我得到了下面的消息:
Following modules built successfully but were removed because they could not be imported:
_hashlib _ssl
Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer
这是尝试编译的完整日志:https://pastebin.com/36EntpFz
当我使用@tony-yip提到的配置选项时,我在配置中得到以下内容。
checking for openssl/ssl.h in /etc/ssl... no
checking whether compiling and linking against OpenSSL works... no
我正在确定我的openssl位置:
[brad@reason Python-3.10.0]$ openssl version -d
OPENSSLDIR: "/etc/ssl"
要配置,我使用:
./configure --with-openssl="/etc/ssl"
当我查找ssl. h时,我在/usr/include/openssl
中找到了它,所以我将此目录链接到/etc/ssl
中的lib,但没有任何帮助。
[brad@reason Python-3.10.0]$ ls -l /etc/ssl
total 40
lrwxrwxrwx 1 root root 16 Jul 16 2020 certs -> ../pki/tls/certs
-rw-r--r-- 1 root root 412 Oct 12 02:53 ct_log_list.cnf
-rw-r--r-- 1 root root 412 Oct 12 02:53 ct_log_list.cnf.dist
lrwxrwxrwx 1 root root 20 Oct 18 10:22 lib -> /usr/include/openssl
drwxr-xr-x 2 root root 4096 Oct 12 02:53 misc
-rw-r--r-- 1 root root 10909 Oct 12 02:53 openssl.cnf
-rw-r--r-- 1 root root 10909 Oct 12 02:53 openssl.cnf.dist
drwxr-xr-x 2 root root 4096 Oct 12 02:53 private
[brad@reason Python-3.10.0]$ sudo find / -name ssl.h | grep include
find: ‘/tmp/.mount_jetbraAJFEnl’: Permission denied
/home/brad/Downloads/freerdp-2.0.0-rc4/winpr/include/winpr/ssl.h
/home/brad/Downloads/FreeRDP/winpr/include/winpr/ssl.h
/home/brad/Development/tlscheck/openssl-1.1.1l/include/openssl/ssl.h
/usr/include/openssl/ssl.h
/var/lib/docker/overlay2/23e6f3c164ec8939352891c99393669df4ed6e66da1e04ce84616073f08c6051/diff/usr/include/openssl/ssl.h
/var/lib/flatpak/runtime/org.freedesktop.Sdk/x86_64/18.08/c8075e929daaffcbe5c78c9e87c0f0463d75e90d2b59c92355fa486e79c7d0e3/files/include/nss/ssl.h
/var/lib/flatpak/runtime/org.freedesktop.Sdk/x86_64/18.08/c8075e929daaffcbe5c78c9e87c0f0463d75e90d2b59c92355fa486e79c7d0e3/files/include/openssl/ssl.h
find: ‘/run/user/1000/gvfs’: Permission denied
这可能是无关的信息,但我的libssl.so在这里:
[brad@reason Python-3.10.0]$ ls /usr/lib64 | grep ssl
libevent_openssl-2.0.so.5
libevent_openssl-2.0.so.5.1.9
libssl3.so
libssl.so
libssl.so.10
libssl.so.1.0.2k
openssl
任何关于为什么make不能包含ssl的想法,请告诉我。谢谢。
5条答案
按热度按时间wb1gzix01#
有一个非常相似的问题,openssl不工作,并给出相同的错误与python 3.10在centos 7。下载openssl解压,然后转到该目录
然后转到python源代码,将其解压缩并在目录中运行
另请参阅https://docs.python.org/3/using/unix.html上的自定义OpenSSL。
lf5gs5x22#
这是非常有帮助的,谢谢!让我想到这个问题的是无法在venv中运行/更新
pip
,所以除了弄清楚如何让OpenSSL工作之外,没有太多的替代方案。截至本周(2021年12月21日),在我的环境(
CentOS Linux release 7.9.2009 (Core)
)中,我已经能够简化其中的一些部分。从EPEL开始,安装
openssl11
,(是的,也安装openssl11-devel
);为了正确设置Python 3.10,我需要创建“OpenSSL目录”,我是这样做的:然后为(新安装的)需求设置符号链接:
最后,将此位置提供给
configure
脚本:谢谢你对如何以及为什么这一切都是必要的真正有帮助的解释。希望这对其他人有帮助...
nfeuvbwi3#
如输出所示,您需要指向openssl 11,我发现最简单的方法是更改python 3.10源代码目录中的
configure
文件:然后您可以按照@CristiFati的建议进行操作,以便在安装之前检查它是否配置正确:
izj3ouym4#
1.简介
一些参考资料可能(或多或少)有用:
从Docker Hub处理 CentOS 7 映像(因为它最接近 RHEL 7(您正在使用的))
2. OpenSSL 注意事项
顺便说一句,我曾多次在各种 OSes / CPU 架构(包括 RHEL 7)上构建(内部修改的)OpenSSL 版本,但由于 rpm 可用,我就不再费心去做了
这是一个工作正常的 OpenSSL 1.1.1g FIPS 版本。
3. Python 构建
4.测试
构建成功。
快速测试(无
make install
):3ks5zfa05#
Python将使用捆绑的ssl(有时候已经过时了)。为了使用OpenSSL,在运行./configure时添加OpenSSL的flag。详细信息,运行
./configure --help
以获得更多选项。