使用 SSL 从源代码安装 Python 3.7.3 失败

使用 SSL 从源代码安装 Python 3.7.3 失败

我在使用 SSL 安装 Python 3.7.3 时遇到了问题。

我所有的编译都成功了,但是模块的最终安装_ssl失败了。

步骤1:安装OpenSSL:

git clone https://github.com/openssl/openssl.git
cd openssl
git checkout tags/OpenSSL_1_0_2r
./Config
make
sudo make install

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

配置正确:

checking for openssl/ssl.h in /usr/local/ssl... yes
checking whether compiling and linking against OpenSSL works... yes
checking for X509_VERIFY_PARAM_set1_host in libssl... yes

步骤3:编译python

make

步骤 4a:安装 python

sudo make install

此步骤失败:

*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-x86_64-3.7/_ssl.cpython-37m-x86_64-linux-gnu.so: undefined symbol: X509_VERIFY_PARAM_set_hostflags
...
Following modules built successfully but were removed because they could not be imported:
_ssl

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

make install prefix="~/Downloads/install"

此时安装就成功了。

步骤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/

有人能解释为什么会发生这种情况吗?

答案1

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

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

  3. 以 root 身份输入:ldconfig

重新编译。

相关内容