openssl - 使用 pyenv 在 Ubuntu 14.04 上编译 Python 3.7
问题描述
在 Ubuntu 14.04 上编译 Python 3.7 及更高版本不能开箱即用。这是因为 Ubuntu 14.04 以 OpenSSL 1.0.1 为基准,而 Python 3.7 需要 OpenSSL 1.0.2 及更高版本。
不涉及第 3 方 PPA 的最佳解决方案是什么?
解决方案
我没有看到一个明确的解决方案,所以我决定在不影响系统其余部分的情况下编写一个从源代码编译的解决方案。
您需要两个步骤,一个是构建您自己的 OpenSSL 版本,第二个是指示 pyenv 使用它。
要安装 OpenSSL,请运行以下命令。
mkdir openssl
cd openssl
wget https://www.openssl.org/source/openssl-1.0.2u.tar.gz
tar -xzvf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config --prefix=$HOME/openssl --openssldir=$HOME/openssl shared zlib
make
make install
这会将 OpenSSL 1.0.2 上的最新版本(不再发布补丁)安装到您的主目录。现在使用 pyenv 安装 Python 3.7。
配置 pyenv 后,运行以下命令
PATH="$HOME/openssl:$PATH" CPPFLAGS="-I$HOME/openssl/include" CFLAGS="-I$HOME/openssl/include/" LDFLAGS="-L$HOME/openssl/lib -Wl,-rpath,$HOME/openssl/lib" LD_LIBRARY_PATH=$HOME/openssl/lib:$LD_LIBRARY_PATH LD_RUN_PATH="$HOME/openssl/lib" CONFIGURE_OPTS="--with-openssl=$HOME/openssl" PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.5
如果您想要更快的运行时间,您可以添加 -O2。
推荐阅读
- android - 有什么办法可以在 Mac 上的 android studio 3.5.1 中修复这个错误
- c++ - 更改数组头指针 C++
- puppeteer - puppeteer.js 单击带有类的超链接
- excel - 如何删除 VBA 中文本字符串末尾以数字开头的任何内容?
- excel - 我需要使用 pyexcel 或 openpyx 检查 Excel 文件中是否已存在日期
- c# - 如何在业务类中注入 IDistributedCache
- java - Jenkins Windows 10 本地错误请求 - 主机名无效
- visualforce - 在 Pdf 中渲染 JS 生成的图像
- javascript - 渲染自定义组件的问题
- javascript - 我在来自数据库的graphql中从resolve返回的每个字段都为null