我在使用 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
编译 OpenSSL 并进行安装(如果默认情况下它将安装在 下
/usr/local/ssl
);确保使用共享选项进行编译将其完整路径添加到链接器搜索配置文件:
/etc/ld.so.conf
以 root 身份输入:
ldconfig
重新编译。