SLES 12.5 从源代码安装 Python 3.9

SLES 12.5 从源代码安装 Python 3.9

我尝试过

wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz
tar xvzf Python-3.9.4.tgz

移动到源目录

./configure
make

然后,经过很多行之后,我收到一个错误

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

我不明白该怎么做,因为我检查了

openssl version
OpenSSL 1.0.2p-fips  14 Aug 2018

openssl-1_1 version
OpenSSL 1.1.1d  10 Sep 2019

而且,从根开始:

Reading installed packages...

S  | Name                       | Summary                           | Type
---+----------------------------+-----------------------------------+-----------
i+ | libgnutls-openssl27        | The GNU Transport Layer Securit-> | package
i  | libopenssl-1_0_0-devel     | Development files for OpenSSL     | package
i+ | libopenssl-devel           | Include Files and Libraries man-> | package
i  | libopenssl1_0_0            | Secure Sockets and Transport La-> | package
i  | libopenssl1_0_0-32bit      | Secure Sockets and Transport La-> | package
i  | libopenssl1_1              | Secure Sockets and Transport La-> | package
i  | libxmlsec1-openssl1        | OpenSSL crypto plugin for XML S-> | package
i  | openssl                    | Secure Sockets and Transport La-> | package
i  | openssl-1_0_0              | Secure Sockets and Transport La-> | package
i+ | openssl-1_1                | Secure Sockets and Transport La-> | package
i+ | python3-pyOpenSSL          | Python wrapper module around th-> | package

有任何想法吗?是否无法在 SLES 12.5 上使用 python 3.9?我可以拥有的最高版本是多少? (当然我已经有 zypper 的原生 3.6)

也许我应该配置 openssl 的根目录,但我不确定它到底在哪里

 which openssl-1_1
/usr/bin/openssl-1_1

是吗/usr/bin? (我不这么认为)

答案1

您在系统上安装的版本openssl-devel不够新,无法构建 Python 3.9。您将在许多包含所需开发库的软件包中遇到此问题,因为您运行的 SLES 12 仅具有版本 1.0.0,而 Python 3.9 至少需要 1.0.2,最好是 1.1。

您唯一能做的就是从源代码构建 Openssl 1.0.2 或 1.1 并将其添加到您的环境中。您需要对系统上不够新的任何其他所需软件包执行相同的操作。 SLES 12 仍受支持,但不会提供适用于较新软件(例如 Python 3.9)的最新软件包。

答案2

仅用于记录一些细节(当我必须在新快照上重复该过程时)。

当我尝试配置 python3.9 时

./configure --prefix=$PY_HOME --with-openssl=/path_toopenssl/openssl-1.1.1k/apps

这不太可能,因为我的路径中已经有另一个旧的 openssl,所以我最终诉诸优先考虑正确的路径

export PATH=/path_toopenssl/openssl-1.1.1k/apps:$PATH

然后我在 libffi 方面遇到了很多问题,所以我想值得注意的是,之后

git clone https://github.com/libffi/libffi.git

和平常一样

./autogen.sh
.configure
zypper in makeinfo
make
make install

对我来说最棘手的部分是

export LD_LIBRARY_PATH=/usr/local/lib64
export LD_RUN_PATH=/usr/local/lib64
./configure --prefix=$PY_HOME PK_CONFIG_PATH=/usr/local/lib/pkgconfig --with-system-ffi=/usr/local/lib64 LDFLAGS=-L/usr/local/lib64
make
make install

此时pip3.9可能会失败No module named '_posixsubprocess',可以通过安装来解决

zypper in python3-curses
zypper in python-curses
zypper in ncurses
zypper in ncurses-devel

以上还不是全部,因为pip39 install readline崩溃了,最后我设置了pip3.9 install gnureadline

看起来现在正在工作:-)

相关内容