使用 ssl 从源安装 Python 3.7.3 失败

Tan*_*Dat 5 linux python ssl ubuntu installation

我在使用 ssl 安装 Python 3.7.3 时遇到了麻烦。我所有的编译都成功了,但是模块_ssl的最终安装失败了。

第一步:安装openssl

git clone https://github.com/openssl/openssl.git
cd openssl
git checkout tags/OpenSSL_1_0_2r
./Config
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

openssl 安装在 /usr/local/ssl

第二步:配置Python3.7.3

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
tar xzvf Python-3.7.3.tgz
cd Python-3.7.3
./configure --with-openssl=/usr/local/ssl
Run Code Online (Sandbox Code Playgroud)

配置正确:

检查 /usr/local/ssl 中的 openssl/ssl.h ... 是

检查针对 OpenSSL 的编译和链接是否有效......是的

检查 libssl 中的 X509_VERIFY_PARAM_set1_host ... 是

第三步:编译python

make
Run Code Online (Sandbox Code Playgroud)

步骤4a:安装python

sudo make install
Run Code Online (Sandbox Code Playgroud)

此步骤失败:

*** 警告:自导入失败后重命名“_ssl”:build/lib.linux-x86_64-3.7/_ssl.cpython-37m-x86_64-linux-gnu.so:未定义符号:X509_VERIFY_PARAM_set_hostflags

...

以下模块成功构建但由于无法导入而被删除:

_ssl

步骤 4b:将 python 安装到本地文件夹中

make install prefix="~/Downloads/install"
Run Code Online (Sandbox Code Playgroud)

在这种情况下安装成功。

步骤 4apython3 -c "import ssl"失败后。但是,如果我替换_ssl在步骤 4b 中编译的模块,则上述命令有效。

sudo rm /usr/local/lib/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu_failed.so
sudo cp ~/Downloads/install/lib/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so /usr/local/lib/python3.7/lib-dynload/
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会发生这种情况?

小智 0

  1. 编译 OpenSSL 并 make install(如果默认会安装在 下/usr/local/ssl);确保使用共享选项进行编译

  2. 将其完整路径添加到链接器搜索配置文件:/etc/ld.so.conf

  3. 以 root 身份输入:ldconfig

重新编译。