mca*_*tis 11 python ssl openssl python-3.x
从源代码构建Python 3.7会遇到以下错误:
Failed to build these modules:
_hashlib _ssl
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
Run Code Online (Sandbox Code Playgroud)
我从其他stackoverflow问题尝试了很多变通方法,但它不起作用.我从源代码构建最新的OpenSSL和LibreSSL.OpenSSL路径是:"/ usr/local/ssl",版本为OpenSSL 1.0.2p.
./configure --with-openssl=/usr/local/ssl/
(./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib")
make
make altinstall
Run Code Online (Sandbox Code Playgroud)
我的系统:Ubuntu 12.04.5 LTS
有任何想法吗?
Sun*_*mar 13
仅仅因为这个博客,我在 3 天后解决了它。使用 python 3.7.4 openssl 1.1.0 centOS 6。
这是摘要:
首先,一些先决条件:
sudo apt-get install build-essential checkinstall libreadline-gplv2-dev libncursesw5-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
Run Code Online (Sandbox Code Playgroud)
如果使用 centos linux,请使用 yum 而不是 apt-get。
安装 ssl 1.0.2 或更高版本。
cd /usr/src
curl https://www.openssl.org/source/openssl-1.0.2o.tar.gz | tar xz
cd openssl-1.0.2o
./config shared --prefix=/usr/local/
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)
我们需要将 /usr/src/openssl-1.0.2o 传递到 Python 配置脚本中。
mkdir lib
cp ./*.{so,so.1.0.0,a,pc} ./lib
Run Code Online (Sandbox Code Playgroud)
现在继续安装 Python:
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
sudo tar xzf Python-3.7.0.tgz
cd Python-3.7.0
./configure --with-openssl=/usr/src/openssl-1.0.2o --enable-optimizations
sudo make
sudo make altinstall
Run Code Online (Sandbox Code Playgroud)
要测试它,请运行 python3.7 并输入:
import ssl
ssl.OPENSSL_VERSION
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
下载您的 openssl tarball,解压缩,然后确保安装目录名为
openssl
.我把我的放在 /usr/local/openssl 中,所以我会在我的例子中使用它。
sudo mv openssl-1.0.2u /usr/local/openssl && cd /usr/local/openssl
sudo make distclean
sudo ./config -fPIC -shared
sudo make && sudo install
现在,将 openssl 共享库添加到您的 PATH。
vim ~/.profile
Go
export PATH="/usr/local/openssl/lib:$PATH"
:wq
这里的关键是理解你定义的路径
--with-openssl=
是 Python 寻找/openssl/lib 的地方。你需要把openssl目录的父目录给Python 。这意味着,如果您设置了,即使日志显示 openssl 正常,
--with-openssl=/usr/local/openssl
您make install
也会失败make
!
--enable-optimizations
不相关但推荐 - 更长的时间使 Python 代码速度提高 10% 是一个很好的权衡。
--prefix=
如果您不知道,那只是我希望安装 python3 的地方。
sudo make distclean
编辑你的python安装文件
vim /{yourpythonsource}/Modules/Setup
取消注释以下几行并确保您的 SSL 变量指向您的 openssl 目录。在我的情况下,它正在寻找目录“ssl”而不是“openssl”。
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
sudo ./configure --with-openssl=/usr/local --prefix=/opt/python-3.7.1
sudo make && sudo make install
虽然这可能不是最好的答案,但我将分享我是如何解决这个问题的。
首先,就我而言,OpenSSL 没有正确构建,make test
返回错误也是如此(因此 Python 给出了这个错误)。这是通过安装更新版本的 Perl 然后再次安装 OpenSSL(配置、制作等)来解决的。
在使用 ./configure 之前使用此命令
导出 LD_LIBRARY_PATH=/path/to/openssl/lib:$LD_LIBRARY_PATH
在配置命令中,包括库:
LDFLAGS="-L/path/to/openssl/lib" ./configure (所有你喜欢的选项) --with-openssl=/path/to/openssl
显然, configure 选项不会将消息传达给需要它的 C 编译器。
我不确定是否同时需要选项 2 和选项 3,但我这样做了并且它奏效了。
无需使用自定义的 openssl编辑Modules/Setup
python 构建的文件。
我在Debian 9stretchpython 3.11.0-rc2
下按照官方文档构建:
https://docs.python.org/3/using/unix.html?highlight=openssl#custom-openssl
\n\n\n\n
openssl.cnf
要使用您的供应商\xe2\x80\x99s OpenSSL 配置和系统信任存储,请找到包含文件或符号链接的目录/etc
。在大多数发行版上,文件位于/etc/ssl
或/etc/pki/tls
. 该目录还应包含 cert.pem 文件和/或 certs 目录。Run Code Online (Sandbox Code Playgroud)\n$ find /etc/ -name openssl.cnf -printf "%h\\n"\n/etc/ssl\n
下载、构建并安装 OpenSSL。确保您使用的是
\ninstall_sw
而不是install
。目标install_sw
不会覆盖.openssl.cnf
Run Code Online (Sandbox Code Playgroud)\n$ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz\n$ tar xzf openssl-VERSION\n$ pushd openssl-VERSION\n$ ./config \\\n--prefix=/usr/local/custom-openssl \\\n--libdir=lib \\\n--openssldir=/etc/ssl\n$ make -j1 depend\n$ make -j8\n$ make install_sw\n$ popd\n
使用自定义 OpenSSL 构建 Python(请参阅配置
\n--with-openssl
和--with-openssl-rpath
选项)Run Code Online (Sandbox Code Playgroud)\n$ pushd python-3.x.x\n$ ./configure -C \\\n--with-openssl=/usr/local/custom-openssl \\\n--with-openssl-rpath=auto \\\n--prefix=/usr/local/python-3.x.x\n$ make -j8\n$ make altinstall\n
安装后ssl 模块检查正常:
\n$ find /etc/ -name openssl.cnf -printf "%h\\n"\n/etc/ssl\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
5458 次 |
最近记录: |