鲲鹏 CentOS 7 安装Python3.7


Posted in Servers onMay 11, 2022

具体编译过成与正常的Python源代码在x86平台上的过程无异,此篇随笔仅当用作复制黏贴的备忘录。不得不说在一个老旧系统上安装一个老旧的Python版本,从头编译一个Python还是一个较为稳健的选择。

获取源代码

Python官网处下载所需源码版本[https://www.python.org/downloads/source/]

curl -O https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz

准备工作(安装依赖)

其实依赖不装全也是能够顺利编译完成的,只不过在make阶段会放弃部分组件的构建如压缩算法和ssl,tk一类的组件,但是有条件还是建议装全咯。

yum install -y gcc make
yum install -y openssl openssl-devel openssl-static bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel expat-devel tk tk-devel tcl tcl-devel libffi libffi-devel

生成Makefile

这边主要注意下几个参数,--enable-shared生成动态依赖库(非必要),--prefix 指定Python安装目录(务必指定,尤其在有多个python环境下的时候,你也不想覆盖了系统自带的Python导致系统组件如yum一类的挂掉),--enable-optimizations(优化参数非必要)。还有就是,如果你的openssl安装到了其他目录或是有多openssl的环境请使用--with-openssl=DIR指定你使用的openssl版本,这在低版本操作系统下构建高版本python时非常重要,已centos7为例子它自带的openssl-1.0.2不足以用于构建Python3.10(python3.10需要openssl 1.1.1以上),但是贸然的修稿系统的openssl版本会导致其余依赖程序的崩溃,所以你只能在特定目录下安装openssl并使用。

# 解压源码包
tar zxvf Python-3.7.13.tgz && cd Python-3.7.13
# 生成Makefile
./configure --enable-shared --prefix=/usr/local/python3.7 --enable-optimizations

构建&&安装

有一说一在鲲鹏这种主频较低的cpu上编译着实挺慢的

make && make install

添加环境变量

echo 'export PATH="$PATH:/usr/local/python3.7.3/bin"' >> /etc/profile

其他小问题

找不到libpython3.7m.so.1.0

[root@localhost Python-3.7.13]# python3
python3: error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

把libpython3.7m.so.1.0放到系统能找到的地方便是

# 在编译的目录下
cp -f libpython3.7m.so.1.0 /lib64

升级pip上的小坑

如果你要保证在多python环境下(python2和python3共存)下升级pip,建议使用

curl https://bootstrap.pypa.io/get-pip.py | python3

来升级,已保证升级过程不会错误的调用python2

影响pyinstaller打包后python程序移植性的因素

除了cpu的架构,操作系统位数以外不谈(这些太容易被注意了),指的注意的是glib版本。如果你的编译环境有升级内核的行为导致glibc版本被改变了,高版本的打包后程序是无法在低版本的glibc系统上运行的(反过来没问题)。所以如果想让打包的程序在尽可能多的操作系统上运行请在低版本的glibc上构建你的程序,这边有一个建议的组合centos5.8+python3.6.1,应该是一个较为极限的组合了,glibc版本2.5。 你要问咋看?ldd --version一下就成。

到此这篇关于国产化设备鲲鹏CentOS7上源码安装Python3.7的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
Nginx反向代理多个服务器的实现方法
Mar 31 Servers
Nginx解决前端访问资源跨域问题的方法详解
Mar 31 Servers
Nginx Rewrite使用场景及配置方法解析
Apr 01 Servers
nginx配置虚拟主机的详细步骤
Jul 21 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
Nginx源码编译安装过程记录
Nov 17 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
搭建Yolov5服务器
Apr 30 Servers
排查Tomcat进程假死的问题
May 06 Servers
解决Git推送错误non-fast-forward的方法
Jun 25 Servers
在容器中使用nginx搭建上传下载服务器
May 11 #Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
May 11 #Servers
nginx 配置缓存
May 11 #Servers
Nginx的gzip相关介绍
May 11 #Servers
详解如何使用Nginx解决跨域问题
May 06 #Servers
配置nginx负载均衡
May 06 #Servers
tomcat下部署jenkins的方法
You might like
留言板翻页的实现详解
2006/10/09 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python实现的简单抽奖系统实例
2015/05/22 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
python如何调用百度识图api
2020/09/29 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
大学毕业自我鉴定范文
2014/02/03 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
普通员工辞职信范文
2015/05/12 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
详解Django的MVT设计模式
2021/04/29 Python
Django中的JWT身份验证的实现
2021/05/07 Python
js之ajax文件上传
2021/05/13 Javascript
SpringBoot集成Redis的思路详解
2021/10/16 Redis
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript