写了一个py脚本,实现一个小功能,我这边都还是Python2.7,是时候升级了,今天来尝试一下。
各种折腾,耗时一下午+一上午。
参考了各种文章,也遇到一些坑,这里记录一下,如果有错误,和不对的地方,欢迎留言。
我的系统为anolis-7.9,也是比较老了,内置了Python2.7,OpenSSL1.1.0。
一开始是直接编译安装Python3,但在使用requests库的时候,urllib3提示需要OpenSSL不低于1.1.1,额,以至于入坑,编译OpenSSL。查看
https://github.com/urllib3/urllib3/issues/2168
直接下载最新版包
//查看OpenSSL版本 openssl version //安装一些依赖 yum -y install zlib1g-dev zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make -y wget https://www.openssl.org/source/openssl-3.3.0.tar.gz tar -xvf openssl-3.3.0.tar.gz cd openssl-3.3.0 //这里编译遇到缺两个依赖,再装一下 yum install perl-IPC-Cmd perl-Data-Dumper -y ./config make make install
一路顺利,全部默认安装,这里后面就留了坑。
替换之前的版本,和一些库,这里遇到坑,只替换了libssl.so,没替换libssl.so.3,后面报找不到。
mv /usr/bin/openssl /usr/bin/openssl.old ln -sv /usr/local/bin/openssl /usr/bin/openssl ln -s /usr/local/lib64/libssl.so.3 /usr/lib64/libssl.so.3 ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3 ln -s /usr/local/lib64/libssl.so.3 /usr/lib64/libssl.so ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so
这里也有教程说直接改,我一开始改了,后面被我删除了,仅供参考。
echo "/usr/local/lib64/" >> /etc/ld.so.conf ldconfig
查看是否为最新版
openssl version
可以看到已经升级成功。
加入环境变量,这一步没做,后面编译Python一直还是提示OpenSSL过低,
而且这几个路径也烦恼,前面默认参数编译,也没自定义路径,也不知道路径是什么。
vi ~/.bash_profile
最后面加入
export LDFLAGS="-L/usr/local/lib64" export CFLAGS="-I/usr/local/include" export LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
重载环境变量。
source ~/.bash_profile
验证环境变量是否成功
echo $LD_LIBRARY_PATH
下载最新版Python
wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz tar -xvf Python-3.12.3.tgz cd Python-3.12.3 mkdir /usr/local/python3
编译参数,这里被坑
./configure --prefix=/usr/local/python3 --enable-optimizations
这里很多教程需要加–with-openssl=/usr/local/bin/openssl ,但是我们前面默认参数编译OpenSSL,一些路径不对找不到,反而是不加成功编译。
checking for include/openssl/ssl.h in /usr/local/bin/openssl... no checking whether compiling and linking against OpenSSL works... no checking for --with-openssl-rpath... checking whether OpenSSL provides required ssl module APIs... no checking whether OpenSSL provides required hashlib module APIs... no checking for --with-ssl-default-suites... python checking for --with-builtin-hashlib-hashes... md5,sha1,sha2,sha3,blake2 checking for libb2... no
后面编译出来要不然是报错,要不然就是没有SSL模块。这里折腾耽误时间。
make make install
一路通畅,没有报错了。
完成后自行决定是否替换原来的Python2.7和加入环境变量,这里就不叙述了,但是强烈建议不要替换原来的Python2.7
/usr/local/python3/bin/python3 Python 3.12.3 (main, Apr 24 2024, 13:31:35) [GCC 4.8.5 20150623 (Anolis 4.8.5-44.0.1)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import ssl; print(ssl.OPENSSL_VERSION) OpenSSL 3.3.0 9 Apr 2024
可以看到已经成功安装Python3.12.3并使用OpenSSL3.3.0 。
转载请注明:果果.IT » Linux升级OpenSSL3安装Python3.12