为了应对不同开发环境共存的要求,经常需要在centos上安装多个版本的python。这里我对此做一个总结。

1.升级centos的系统缺省应用程序到最新版本

yum -y update

2.安装开发工具包

centos缺省不包含很多软件开发常用的工具包,所以需要安装。

yum groupinstall -y 'development tools'
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

注意,如果不在编译安装python之前就把这些工具包装好,python安装时就不会link这些软件模块。

3.其它安装python之前考虑的安装选项

  • UNICODE支持 

python对unicode的支持已经有很多年了,python3.2之前的版本如果没有特别需求,应该在configure时用--enable-unicode=ucs4选项激活UTF-32; 对于python3.2,则是--with-wide-unicode

  • Shared library

现代linux的发行版配置的python都是编译成share library方式,有些第三方软件如mod_wsgi和Blender必须要这样才能正常运行。但是,如果把python编译成share library,就必须告知如何才能找到这个library。有两种办法达到这个目的:

  1. 通过在configure命令的最后加入LDFLAGS="-Wl,-rpath /usr/local/lib"选项把路径编译到可执行文件里面去

  2. 编辑文件/etc/ld.so.conf,把路径/usr/local/lib加入到文件的最后一行。然后运行命令/sbin/ldconfig让动态链接器更新设置。

#注意:有时候需要在python安装完之后再运行ldconfig命令,更新设置才生效。建议使用办法1,直接在可执行文件里面写死路径。

  • 编译时使用“make altinstall"命令

这个命令非常重要,因为如果使用常规的"make install"命令,会导致编译生成的可执行程序文件中有一个文件名字是python,他会与系统自带的python版本程序混淆,并可能引发难以诊断的错误。

4.缺省程序安装路径

python缺省安装路径是/usr/local,可以在configure时候用

--prefix=

选项修改它到其它路径。但是如果这么做了,就需要修改PATH变量,把新的路径加入进去。

5.下载,编译和安装python


# Python 2.7.11:

wget

https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz

xz -d Python-2.7.11.tar.xz

tar xf Python-2.7.11.tar

cdPython-2.7.11

./configure--prefix=/usr/local--enable-unicode=ucs4--enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

make&&makealtinstall

# Python 3.5.1:

wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz

xz -d Python-3.5.1.tar.xz

tar -xvf Python-3.5.1.tar

cdPython-3.5.1

./configure--prefix=/usr/local--enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

make && make altinstall

# Python 3.3.6:

wget https://www.python.org/ftp/python/3.3.6/Python-3.3.6.tar.xz

xz -d Python-3.3.6.tar.xz 

tar -xvf Python-3.3.6.tar

cd Python-3.3.6

./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"  

make&&makealtinstall

6.下载和安装setuptools和pip工具

#下述命令来自setuptools官网https://pypi.python.org/pypi/setuptools/

wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py

python2.7 ez_setup.py --insecure
python3.3 ez_setup.py --insecure    #在centos6.8上执行python3.5.1有问题(运行时会hang), python3.3.6则正常

上述命令在执行过程中会在目录/usr/local/bin生成两个文件:easy_install-xx和easy_install文件。这两条命令执行按照上述次序执行完成后,目录/usr/local/bin有三个文件示例如下。

[root@localhost ~]# ll /usr/local/bin/easy*

-rwxr-xr-x. 1 root root 332 Jun 22 00:15 /usr/local/bin/easy_install

-rwxr-xr-x. 1 root root 340 Jun 21 14:56 /usr/local/bin/easy_install-2.7

-rwxr-xr-x. 1 root root 340 Jun 22 00:15 /usr/local/bin/easy_install-3.3

[root@localhost ~]# file /usr/local/bin/easy_install-2.7

/usr/local/bin/easy_install-2.7: a /usr/local/bin/python2.7 script text executable

[root@localhost ~]# file /usr/local/bin/easy_install-3.3

/usr/local/bin/easy_install-3.3: a /usr/local/bin/python3.3 script text executable

[root@localhost ~]# file /usr/local/bin/easy_install

/usr/local/bin/easy_install: a /usr/local/bin/python3.3 script text executable

可以看出在安装了多个python版本的系统里,应该指定easy_install的版本来运行。

执行以下命令为不同版本python安装pip模块:

/usr/local/bin/easy_install-2.7 pip

/usr/local/bin/easy_install-3.3 pip

命令执行后,目录/usr/local/bin下会生成如下pip程序:

-rwxr-xr-x. 1 root root   290 Jun 22 07:07 pip

-rwxr-xr-x. 1 root root   292 Jun 22 06:59 pip2

-rwxr-xr-x. 1 root root   296 Jun 22 06:59 pip2.7

-rwxr-xr-x. 1 root root   292 Jun 22 07:07 pip3

-rwxr-xr-x. 1 root root   296 Jun 22 07:05 pip3.3

可以看出,对应不同版本python也有不同的pip程序,我们可以如下格式使用pip安装python package

pip2.7install[packagename]

pip2.7install--upgrade[packagename]

pip2.7uninstall[packagename]

7.为python2安装virtualenv沙盒 ---virtualenv是python2上运行的最常见沙盒模块

由于python3内含沙盒环境pyenv,所以不需要安装virtualenv

/usr/local/bin/pip2.7 install virtualenv

安装会在目录/usr/local/bin生成文件:virtualenv,示例如下:

[root@localhost ~]# ll /usr/local/bin/virtu*

-rwxr-xr-x. 1 root root 220 Jun 22 07:20 /usr/local/bin/virtualenv

[root@localhost ~]# file /usr/local/bin/virtualenv

/usr/local/bin/virtualenv: a /usr/local/bin/python2.7 script text executable

8.用virtualenv创建不同版本python的沙盒环境

前提是这些版本的python基础程序已经安装前述办法安装在系统中了

virtualenv --python=/usr/local/bin/python2.7 /sandbox/v27

virtualenv --python=/usr/bin/python2.6 /sandbox/v26

virtualenv --python=/usr/local/bin/python3.3 /sandbox/v33

virtualenv --python=/usr/local/bin/python3.5 /sandbox/v35

9.激活使用virtualenv的沙盒

source /home/lb/sanbox/v_26/bin/activate   #激活沙盒v_26

(v35) [root@localhost lb]# python --version     #执行需要的命令

deactivate                #退出沙盒

10.使用pyvenv创建不同版本python的沙盒环境---pyvenv是python3的内置沙盒模块

pyvenv使用相对更加简单,系统安装的每个版本python3,都在目录/usr/local/bin有对应该版本的pyvenv-3.x程序。

这个程序只能创建对应其版本的沙盒环境,即pyvenv-3.1程序只能创建python3.1的沙盒环境,而pyvenv-3.3程序只能创建python3.3的沙盒环境。

使用示例如下:

[root@localhost sanbox]# pyvenv-3.5 t35        ###在当前目录下创建python3.5的沙盒t35

[root@localhost sanbox]# source ./t35/bin/activate    ###激活沙盒t35

(t35) [root@localhost sanbox]# python --version     ###验证沙盒t35的python版本

(t35) [root@localhost sanbox]# deactivate         ###退出沙盒t35

由此可以看出pyvenv只能建立和管理python3的沙盒环境,virtualenv这可以同时建立和管理python2和python3的沙盒环境。

具体pyvenv使用方法看:https://github.com/yyuu/pyenv#command-reference

转载于:https://blog.51cto.com/leesbing/1827517

在一个centos6上安装多个不同版本python相关推荐

  1. 在Windows上安装两个不同版本的数据库

    ** 在Windows上安装两个不同版本的数据库 ** 我在学校期间,自己安装的8.0版本,老师有可能会让我们用一些版本比较低的数据库,比如说你装的8.0的,突然这个要用到5.7的,又不想删除原有的数 ...

  2. centos6.5 安装mysql8,centos6上安装mysql8.0版本

    本博客是采用yum源的方式安装,非常的方便和快捷.(redhat 与centos7 等操作系统都可以采用此方法,步骤大体一致) mysql官网地址:   https://dev.mysql.com 开 ...

  3. centos6上安装mysql8.0版本

    本博客是采用yum源的方式安装,非常的方便和快捷.(redhat 与centos7 等操作系统都可以采用此方法,步骤大体一致) mysql官网地址:   https://dev.mysql.com 开 ...

  4. 在Ubuntu 14.04 64bit上安装StarUML 2.5版本

    StarUML是来自韩国的一个优秀的UML绘图软件, 原来是免费软件, 现在需要付费购买.当然免费使用功能会有诸多限制. 它支持Windows, Linux和Mac OS等平台. 下面是我在Ubunt ...

  5. android最新能调试吗,android – 不能在同一台设备上安装调试和发布版本

    我已经使用applicationIdSuffix在我的项目中配置了构建版本,以便我可以在我的设备上安装调试版本和发行版本. 这里是我的build.gradle(相关部分): buildTypes { ...

  6. 电脑上安装了多个版本的nodejs,如何知道node命令调用的哪一个

    在命令提示行里输入node -v命令,返回的版本号是老旧的8.11.3, 但我明明安装了最新版本的nodejs. 在控制台里找到该node进程的ID,22288,再到任务管理器里根据22288这个id ...

  7. linux python2.7 protobuf_在ubuntulinux上安装tensorflow,protobuf版本issu

    在Ubuntu(GCloud VM)上安装tensorflow时,我得到的警告是-pip install tensorflow apachebeam0.6.0要求protobuf==3.2.0,但是p ...

  8. Windows7上安装TensorFlow的GPU版本后记

    上一篇写了之前在我的Windows7上安装TensorFlow GPU版的一路坑坑洼洼,本以为已经解决了.但实际上在过年的几天内,又一次出现了问题.经过了反复的尝试,到今天为止终于稳定下来,特此记录一 ...

  9. 在一个IIS上同时运行两个版本ASP.NET报错的

    在Windows 2003 server IIS 6.0上运行一个ASP.NET 2.0网站时出现报错: 服务器应用程序不可用 您试图在此 Web 服务器上访问的 Web 应用程序当前不可用.请点击 ...

  10. 在Windows2003server上安装msn9.0以上版本的解决办法

    方法一: 最近windows 强制升级了msn 9的版本.导致我在windows2003下的msn又一次需要剥离出msi文件才能安装了.在网上逛了一圈发现了如下方法,这里分享下,同时,也感谢作者的详细 ...

最新文章

  1. R可视化散点图并绘制回归曲线
  2. Android项目中出现的Plugin with id ‘kotlin-android‘ not found解决方法
  3. 神马搜索如何提升搜索的时效性?
  4. 线段树POJ3468(成段更新,区间求和)
  5. 《剑指 Offer I》刷题笔记 1 ~10 题
  6. 如何把APP加到HTML,如何将 Microsoft 服务添加到你的应用 (HTML)
  7. matlab练习程序(图像错切)
  8. mysql怎么显示创表的语句_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...
  9. (转)根据两点经纬度计算距离
  10. php和python的选择排序算法,基于python的七种经典排序算法的详细介绍
  11. elementUI + vue实现 Excel筛选功能
  12. RS485以及MODBUS知识积累
  13. 物联网项目开发编程语言一览
  14. 反催收下沉社区,打通丰巢取件码
  15. C# 彻底删除文件或目录,不可恢复,文件清除工具
  16. 计算机主机机箱连接各部件,电脑的各部件组装都是用什么联接的
  17. Improving Entity Linking by Modeling Latent Relations between Mentions
  18. 手持式频谱分析仪 TFN的715c和760c怎么样
  19. 程序员的这 10 个坏习惯!你占了几个?
  20. 文章摘要智能提取【基于BERT技术】

热门文章

  1. java基础学习及总结
  2. 数据结构——线性表的顺序表示
  3. MongoDB数据库的索引操作(转)
  4. vue-router配置
  5. 40.广搜练习:洪水
  6. sql 查询数据长度
  7. MySQL恢复备份读书笔记
  8. 话说地址栏的URL的最大长度
  9. 133 MySQL视图、事务、索引(都很重要)
  10. 20175208 《Java程序设计》第七周学习总结