Linux下多个Python版本安装教程


Posted in Python onAugust 15, 2018

因为环境或学习的需要,我们可能需要在服务器上安装多个python版本,安装一个更新的python版本后,使用软链来进行共存。

这个时候需要进行源码编译安装。

当然后续开发项目可以直接跑在虚拟环境下隔离开来,就不再需要在服务器上安装多个不同版本的包了。

下载Python源码

从http://www.python.org/download/根据需要的版本下载源文件。

Linux下多个Python版本安装教程

例如上图就是我在官网直接找到3.5.6版本的下载页面,点击的tar源码包进行下载。

编译安装

补充

注意编译安装python前最好先保证系统己安装上以下库

yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
yum install readline-devel

解压源码包

tar zxvf Python-3.5.6.tgz
cd Python-3.5.6

配置选项

sudo ./configure --enable-optimizations --prefix=/usr/local/python-3.5.6 --with-zlib --with-readline
--enable-optimizations 为最优安装,建议使用这个参数。
--prefix为指定安装的路径

进行编译安装

sudo make
sudo make install

修改Python软链

默认python命令是在/usr/bin/目录下,需要在这里把软链修改成3.5.6的版本,顺便建立一个3.5.6的软链。

Linux下多个Python版本安装教程

上图是原默认软链接,是python2.7的,其实它也己经默认建立了一个python2的软链接了。

重新命名默认python软链接为python2.7以便3.5的版本成为默认环境变量

sudo mv /usr/bin/python /usr/bin/python2.7

建立python3.5版本的软链接

sudo ln -s /usr/local/python-3.5.6/bin/python3.5 /usr/bin/python

当然,也可以不做上一步,而是将3.5版本的软链接成python3之类也是可行的。

Linux下多个Python版本安装教程

比如我做的就是新增python3的软链接指向python3.5所在的目录。
顺便也将配置文件也做了一个软链接指向:

sudo ln -s /usr/local/python-3.5.6/bin/python3.5-config /usr/bin/python3-config

补充

注意 如无特别需要,推荐命名成不同python的软链接,因为你会发觉要是你直接改了原来指向旧版本的软链接的话,pip,virtualenv等依赖原版本python的工具需要改它的py文件头的环境变量。

Linux下多个Python版本安装教程

如果你修改了原软链接,使得python实际指向的是新版本的python的话,pip等仍依赖旧版本的工具要么重装要么修改它py文件的首行,按实际情况重新指向你的旧版本原版本的python环境,例如此处我就可直接改成/usr/bin/python2

虚拟环境设置不同版本的python

创建好项目目录,cd进到目录下。

在创建python虚拟环境时,可以指定虚拟环境要使用的python版本,例如下命令(使用-p参数指明python解释器的路径):

-p PYTHON_EXE, --python=PYTHON_EXE
 The Python interpreter to use, e.g.,
 --python=python3.5 will use the python3.5 interpreter
 to create the new environment. The default is the
 interpreter that virtualenv was installed with
 (/usr/bin/python)

例:

virtualenv -p /usr/bin/python2 ENV2.7 #创建python2.7的虚拟环境
virtualenv -p /usr/bin/python3 ENV3.5 #创建python3.5的虚拟环境
virtualenv --python=python3 my-env #创建python3.5的虚拟环境

之所以装多个版本的python,有一个原因很重要,也就是想要使用virtualenv创建隔离的虚拟环境的时候指定不同python版本。但是前面我进行编译安装的时候没有指定编译安装上zlib库,就会出现以下如图问题:

Linux下多个Python版本安装教程

报找不到zlib模块错误。

所以最好还是系统原环境变量安装成高版本的python,或进行python编译安装的时候记得加上--with-zlib
最好--with-zlib-develreadline也带上。

当然,补救办法也是有的,就是重新进行编译安装。
(重新进行本文最开始的操作,当然本文最开始笔者己经补充更正过了编译安装时的配置。)

笔者由于重新编译后仍然报zlib模块错误,笔者并不想弄污原来python2.7的环境,所以决定尝试virtualenv下载源码来使用,而zlib也进行编译安装来让python3也能正常导入zlib模块。

下载zlib模块并进行编译安装

官网http://www.zlib.net/下载最新版本的zlib源码文件,我下载的是zlib-1.2.11.tar.gz

安装zlib:

tar xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11

建议默认路径安装,编译三部曲:

./configure
make
make install

python导入zlib

如下图,编译安装完成zlib后,进python3测试己经可能正常导入zlib包。

Linux下多个Python版本安装教程

zlib安装完后,libz.a/usr/local/lib/,opensusezlib.h默认放在/usr/local/include/中。
其它linux的zlib.h文件一般在/usr/include中。

重新编译python并指定zlib

如果还发生少数导入不成功,或你想直接软链接升级python旧版本的,可能需要重新编译python。

进入Python源码文件目录,重新编译Python

sudo ./configure --enable-optimizations --prefix=/usr/local/python-3.5.6 --with-zlib=/usr/include

或者:

./configure --enable-optimizations --prefix=/usr/local/python-3.5.6 --with-zlib-dir=/usr/local/lib

都可以完成python对zlib库的支持,在python源码中直接import zlib即可使用zlib了。

下载virtualenv源码包

直接到pypi下载16.0.0版本。
tar命令进行解压

tar xvfz virtualenv-16.0.0.tar.gz
cd virtualenv-16.0.0

此目录下文件如下,我们主要用到的并不是setup安装,而是直接使用它的virtualenv.py文件。

Linux下多个Python版本安装教程

virtualenv创建虚拟环境

在项目目录下直接指定python版本及virtualenv.py的绝对路径进行创建虚拟环境:

sudo python3 /home/operation/virtualenv-16.0.0/virtualenv.py py3

Linux下多个Python版本安装教程

可以不进行全局安装,而是用户下进行虚拟化环境可以直接使用python3 后接virtualenv.py运行,完美解决需求。

也可以使用原python2下的全局virtualenv来执行,一样可以创建,如:

operation@opensuse-wordpress:/work> sudo virtualenv --python=python3 my_py3_env
[sudo] password for root: 
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr/local/python-3.5.6'
New python executable in /work/my_py3_env/bin/python3
Also creating executable in /work/my_py3_env/bin/python
Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
Installing setuptools, pip, wheel...done.

虚拟隔离环境目录如下:

Linux下多个Python版本安装教程

具体virtualenv的使用命令等见相关文章,在此就不再详述。
如此,在liunx下己经可以实现多版本的python完美共存。

更多关于python安装教程的文章请参考《python各版本安装教程》

更多精彩书单,请点击python编程必备书单

领取干货:零基础入门学习python视频教程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
Python简单实现enum功能的方法
Apr 25 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
Python运行DLL文件的方法
Jan 17 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 Python
python解析照片拍摄时间进行图片整理
Jul 23 Python
Python并发之多进程的方法实例代码
Aug 15 #Python
Python使用sort和class实现的多级排序功能示例
Aug 15 #Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 #Python
Centos下实现安装Python3.6和Python2共存
Aug 15 #Python
详解Python中的type和object
Aug 15 #Python
python 通过 socket 发送文件的实例代码
Aug 14 #Python
Python 打印中文字符的三种方法
Aug 14 #Python
You might like
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python自定义异常实例详解
2017/07/11 Python
python实现textrank关键词提取
2018/06/22 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
python如何建立全零数组
2020/07/19 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
物业管理计划书
2014/01/10 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS