Centos6下编译安装Python3.5.3
时间:2022-07-24
本文章向大家介绍Centos6下编译安装Python3.5.3,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
安装编译依赖
# yum -y install gcc zlib zlib-devel openssl openssl-devel
解释这几个依赖包的作用:
1、gcc这个就不多做解释了,就是编译器
2、zlib依赖是因为在安装Python3.5的编译过程中会依赖于系统的zlib,如果不安装编译的时候不加--with-zlib-dir
参数,编译过程中自动安装pip3就会失败,手动模拟情况示例如下:
[root@Labhost1 src]# python3 get-pip.py
Traceback (most recent call last):
File "get-pip.py", line 20061, in <module>
main()
File "get-pip.py", line 194, in main
bootstrap(tmpdir=tmpdir)
File "get-pip.py", line 82, in bootstrap
import pip
zipimport.ZipImportError: can't decompress data; zlib not available
3、openssl依赖是因为在安装Python3.5的编译过程中会依赖于ssl模块,如果没有的话编译过程中自动安装pip3就会失败,手动模拟情况示例如下:
[root@Labhost1 src]# python3 get-pip.py
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting pip
Could not fetch URL https://pypi.python.org/simple/pip/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
Could not find a version that satisfies the requirement pip (from versions: )
No matching distribution found for pip
下载包编译安装
# wget --no-check-certificate https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz
# tar zxf Python-3.5.3.tgz
# cd Python-3.5.3
# ./configure --prefix=/usr/local/ --with-zlib-dir --enable-shared
执行完成上面操作之后,然后修改Python-3.5.3目录下Modules/Setup文件:
# vim Modules/Setup
把Setup文件207 ~ 210四行内容前端的注释去掉,把:
#SSL=/usr/local/ssl
#_ssl _ssl.c
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl
# -L$(SSL)/lib -lssl -lcrypto
改为:
SSL=/usr/local/ssl
_ssl _ssl.c
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl
-L$(SSL)/lib -lssl -lcrypto
改完之后,然后接着编译:
# make
# make install
验证结果
总结
为什么要写这篇文章,其实没有什么,就是记录自己安装实践过程中的历程,以后再有这种需求,直接照着博客文章,复制粘贴就好了。
那有人问了,Python不是有多版本管理的一些工具包吗,比如Pyenv、pythonbrew等工具。有这些便利的工具为什么不用?
确实这些工具还是相当不错的,我在做一些实验的使用本地开发用过pyenv,还是非常好用的,但是有时候一些准生产环境和线上,我们软件的版本是有严格的版本控制,不会允许多版本共存,除非有特殊情况,比如Centos6.*的yum命令就是基于Python2.6的,这个就不会动了。
所以作为一个运维我一直信奉:没有最好的,只有最适合自我的,只有适合自我场景、业务的任何情况都是合理的,其他的你给我说的天花乱坠,那我只能当你在扯淡。
- 想看爱奇艺VIP视频?一个python脚本帮你搞定
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
- 关于shell中的pl/sql脚本错误排查与分析(r4笔记第21天)
- 关于BFC不会被浮动元素遮盖的一些解释
- MyBatis + MySQL返回插入成功后的主键id
- struts2+spring+hibernate整合步骤(1)
- 微信公众号问题:{"errcode":40125,"errmsg":"invalid appsecret, view more at http://t.cn/LOEdzVq, hints: [
- reflow和repaint(摘录自张鑫旭的翻译)
- git删除本地分支
- org.springframework.data.redis.serializer.SerializationException: Cannot serialize;
- 样式化加载失败的图片
- 使用telnet命令验证邮箱(r4笔记第19天)
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存
- 前端开发中的字符编码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「R」Rprofile:R 全局设置
- Jmetal Problem和Problem Set的变量范围
- 简单工厂、工厂方法、抽象工厂的比较与分析
- 用一张组织架构图说清楚类和对象
- 一起来学matlab-matlab学习笔记8 基本绘图命令_3 特殊图形绘制
- 看了这个有趣的例子,你就秒懂多线程同步了
- IDA7.0 配置内核调试,双机调试
- ViewPager2与Fragment
- SpringBoot整合SpringSecurity实现JWT认证
- 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
- 用非常硬核的JAVA序列化手段实现对象流的持久化保存
- 微信小程序语音同步智能识别的实现案例
- 数据结构之链式队列的代码实现及有趣应用
- 用自定义链式栈解决力扣括号匹配问题
- String及StringTable(三):StringBuilder源码解读