经常遇到这样的情况:

  • 系统自带的Python是2.6,自己需要Python 2.7中的某些特性;
  • 系统自带的Python是2.x,自己需要Python 3.x;

此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存。 pyenv就是这样一个Python版本管理器。

安装pyenv

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l

安装Python

查看可安装的版本

$ pyenv install --list

该命令会列出可以用pyenv安装的Python版本,仅列举几个:

.7.8   # Python 2最新版本
.4.1 # Python 3最新版本
anaconda-4.0.0 # 支持Python 2.6和2.7
anaconda3-4.0.0 # 支持Python 3.3和3.4

其中形如 x.x.x 这样的只有版本号的为Python官方版本,其他的形如 xxxxx-x.x.x 这种既有名称又有版本后的属于“衍生版”或发行版。

安装Python的依赖包

在安装Python时需要首先安装其依赖的其他软件包,已知的一些需要预先安装的库如下。

在CentOS/RHEL/Fedora下:

sudo yum install readline readline-devel readline-static
sudo yum install openssl openssl-devel openssl-static
sudo yum install sqlite-devel
sudo yum install bzip2-devel bzip2-libs

安装指定版本

使用如下命令即可安装python 3.4.1:

$ pyenv install 3.4.1 -v

该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包后重新执行该命令。

如果网络不太好,用pyenv下载会比较慢,可以先执行该命令,然后到 ~/.pyenv/cache 目录下查看要下载的文件的文件名,然后自己到官方网站下载,并将文件放在 ~/.pyenv/cache 目录下(~/.pyenv/cache/ 一般需要手动创建)。pyenv会检查文件的完整性,若确认无误,则不会再重新下载。

对于科研环境,更推荐安装专为科学计算准备的Anaconda发行版, pyenv install anaconda-4.0.0 安装Python 2.x版本, pyenv install anaconda3-4.0.0 安装Python 3.x版本;

更新数据库

安装完成之后需要对数据库进行更新:

$ pyenv rehash

查看当前已安装的python版本

$ pyenv versions
* system (set by /home/seisman/.pyenv/version)
.4.1

其中的星号表示当前正在使用的是系统自带的python。

设置全局的python版本

$ pyenv global 3.4.1
$ pyenv versions
system
* 3.4.1 (set by /home/seisman/.pyenv/version)

当前全局的python版本已经变成了3.4.1。也可以使用 pyenv local 或 pyenv shell 临时改变python版本。

确认python版本

$ python
Python 3.4.1 (default, Sep 10 2014, 17:10:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

使用python

  • 输入 python 即可使用新版本的python;
  • 系统自带的脚本会以 /usr/bin/python 的方式直接调用老版本的python,因而不会对系统脚本产生影响;
  • 使用 pip 安装第三方模块时会安装到 ~/.pyenv/versions/3.4.1 下,不会和系统模块发生冲突。
  • 使用 pip 安装模块后,可能需要执行 pyenv rehash 更新数据库;
  • yenv version #显示当前使用的
  • Python pyenv which python #显示当前Python的安裝路径
  • pyenv global <version> #设置默认的Python版本
  • pyenv local <version> #在当前路径创建一个.python-version,以后进入这个目录自动切换为该版本
  • pyenv shell <version> #在当前shell的session中启用某个Python版本,优先级高于global,local

参考https://github.com/yyuu/pyenv

PS :我安装的centos版本是CentOS Linux release 7.2.1511 (Core) ,里面自带了python 2.7.5(但是没有自带pip,可以通过yum install python-pip进行安装,安装后的pip版本

  可能太低,如有需要pip install --upgrade pip);记得用sudo权限,否则可能会出错;而后我又通过pyenv安装了anaconda3-4.1.1。但是换了高版本的python,发现一些
         packages都安装不了,如何正确地切换python版本,可以通过命令

  1. 1.system就是系统自带的python2.7.5

    [suhong@localhost ~]$ pyenv versions
    * system (set by /home/suhong/.python-version)
    anaconda3-4.1.

      

    2.切换至高版本

    [suhong@localhost ~]$ pyenv local anaconda3-4.1.
    (anaconda3-4.1.) [suhong@localhost ~]$ python
    Python 3.5. |Anaconda 4.1. (-bit)| (default, Jul , ::)
    [GCC 4.4. (Red Hat 4.4.-)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    3.切换至低版本

    (anaconda3-4.1.) [suhong@localhost ~]$ pyenv local system
    [suhong@localhost ~]$ python
    Python 2.7. (default, Sep , ::)
    [GCC 4.8. (Red Hat 4.8.-)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

    4.切换低版本后发现python2.7.5没有pip

    1. 下载setuptools及pip的源码包
    	setuptools与pip都是python的模块
    	setuptools源码包: https://pypi.python.org/pypi/setuptools
    	pip源码包: https://pypi.python.org/pypi/pip#downloads
    2. 安装setuptools与pip
    目前下载的版本是setuptools-12.0.5.tar.gz与pip-6.0.6.tar.gz
    用tar命令解压, 格式:tar -xzvf xxxx.tar.gz
    用cd打开该文件夹,格式:cd xxxx
    用python命令安装,格式:python setup.py install   3.本来照理在python安装package用命令格式:pip install xxxx
    但出现错误,例如:pip install ipython
    出现错误:
    Exception:
    Traceback (most recent call last):
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/basecommand.py", line , in main
    status = self.run(options, args)
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/commands/install.py", line , in run
    prefix=options.prefix_path,
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/req/req_set.py", line , in install
    **kwargs
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/req/req_install.py", line , in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/req/req_install.py", line , in move_wheel_files
    isolated=self.isolated,
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/wheel.py", line , in move_wheel_files
    clobber(source, lib_dir, True)
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/wheel.py", line , in clobber
    ensure_dir(destdir)
    File "/usr/lib/python2./site-packages/pip-8.1.-py2..egg/pip/utils/__init__.py", line , in ensure_dir
    os.makedirs(path)
    File "/usr/lib64/python2./os.py", line , in makedirs
    mkdir(name, mode)
    OSError: [Errno ] Permission denied: '/usr/lib64/python2.7/site-packages/pygments'

    后来发现是权限问题,应该用“sudo pip install xxxx”,结果问题迎刃而解

    5.安装scrapy,出现一些问题

    compilation terminated.
    error: command 'gcc' failed with exit status

    用安装Python模块出现error: command 'gcc' failed with exit status 1 ,明明装了gcc的,怎么会不行呢,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,然后谷歌了一下,先后安装了python-devel,libffi-devel后还是不行,最后发觉要安装openssl-devel才行

    可如下命令行安装:

    yum install gcc libffi-devel python-devel openssl-devel

    6.pip install MySQL-python(出现EnvironmentError: mysql_config not found)

     解决办法:安装包MySQL-devel-5.1.7-0.i386.rpm
                  MySQL-shared-5.1.7-0.i386.rpm
     后,再次进行install就解决了

    机智的我只用了sudo yum install MySQL-devel就解决了

Linux系统之路——python多版本共存问题(ps:自行切换python版本,pip安装遇到的一些问题)的更多相关文章

  1. Linux系统之路——如何在服务器用U盘安装CentOS7.2(二)

    Linux系统之路——如何在服务器用U盘安装CentOS7.2(一) 说明: 截止目前CentOS 7.x最新版本为CentOS 7.2.1511,下面介绍CentOS 7.2.1511的具体安装配置 ...

  2. Linux系统之路——如何在服务器用U盘安装CentOS7.2(一)

    终于将CentOS7装上服务器(thinkserver250,不得不说联想的太烂了)了,过程无比艰辛,因为我发现网上大家提到的所有U盘安装CentOS7时碰到的问题几乎都被我碰到了,像什么: 1.刻录 ...

  3. LInux系统木马植入排查分析 及 应用漏洞修复配置(隐藏bannner版本等)

    在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节.今天,分享一下如何检查linux系统是否遭受了入侵? 一.是否入侵检查 1)检查系统日志 检查系统错误登陆日志,统计IP重试 ...

  4. Linux系统之路——用CentOS 7打造合适的科研环境

    安装CentOS CentOS 7的安装与其他Linux发行版的安装差不多,个别地方稍有不同. 准备工作 准备材料 U盘:容量700M以上,用于制作U盘启动盘,因为在制作启动盘时会格式化U盘,所以U盘 ...

  5. linux 存在多个版本的情况下,切换python版本

    linux 存在多个版本的情况下 python 命令默认寻找 /usr/bin下的命令 所以先find / -name python* 找一下所有的Python版本 然后 sudo ln /usr/b ...

  6. Linux系统之路——如何在CentOS7.2安装MySQL

    一.Mysql 各个版本区别:1.MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.2.MySQL Enterprise Edition 企业版本,需付费,可以试 ...

  7. Python从2.6升级到2.7,使用pip安装module,报错:No Module named pip.log(转载)

    From:http://blog.csdn.net/iefreer/article/details/8086834 python升级后,使用pip安装module,错误: 错误原因:版本升级后,之前的 ...

  8. Linux系统之路Centos7.2——安装QQ 的一些问题(附VMware的安装)

    1.首先安装wine 可以通过源码安装,注意在编译的时候加参数,编译64位(如果你的系统是64位哦!) 但是我建议直接rpm安装. 安装网络源: rpm -ivh epel-release-6-8.n ...

  9. Linux系统之路——如何在CentOS7.2安装R和RStudio(Server)

    使用ubuntu的小伙伴们直接使用命令sudo apt-get install r-base-dev或者r-base搞定.然而对于使用centos的我却一直卡在安装这一步,十分的悲催,只有羡慕的份,但 ...

随机推荐

  1. while read读取文本内容

    读取文件给 while 循环 方式一: exec <FILE while read line do cmd done 方式二: cat FILE_PATH |while read line do ...

  2. sqli-labs学习笔记 DAY2

    DAY2 sqli-labs lesson 2 手工注入 URL:http://localhost/sqli-labs-master/Less-2/ Parameter:id 注入点检测:id=2;– ...

  3. day-19 多种优化模型下的简单神经网络tensorflow示例

    如下样例基于tensorflow实现了一个简单的3层深度学习入门框架程序,程序主要有如下特性: 1.  基于著名的MNIST手写数字集样例数据:http://yann.lecun.com/exdb/m ...

  4. 一个网页从输入URL到页面加载完的过程

    过程概述 1.浏览器查找域名对应的IP地址 2.浏览器根据IP地址与服务器建立socket连接 3.浏览器与服务器通信:浏览器请求,服务器处理请求和响应 4.浏览器与服务器断开连接 具体过程 1.搜索 ...

  5. MySort试验记录

    MySort试验记录 编写目标 结果代码 思路 将数组每一个项目的第三组数字抽出来并且排序成12345的顺序,并形成新数组k3. 把原数组的每一项与k3进行比较,每符合一项便输出一项,从而重新排序出新 ...

  6. 《JavaScript》JavaScript的名字和版本

    语言标准版本名字:ECMAScript(ECMA是欧洲计算机制造协会,据说可能是专门做标准的,除了JavaScript遵循这个标准以外,还有XX....)    Jscript(IE对该语言实现版本的 ...

  7. MMU 和 MPU的区别

    S3C2440里面带的是MMU,而现在流行的Cortex-M3/4 里面带的是MPU. MMU vs MPU 内存是现代计算机最重要的组件之一.因此,它的内容不能被任何错误的应用所篡改.这个功能可以通 ...

  8. 小程序获取 openid 和 session_key

    <?php //获取openid function getopenid(){//获取用户ID //code为前端通过 wx.login() 方式获取 $code = $_GET["co ...

  9. json_decode遇到的编码问题

    初入csdn,就最近遇到的简单问题做一个功能解释; json_encode和json_decode只针对utf8字符有效,如果遇到其他编码比如gbk,需要进行转码然后解析: header(" ...

  10. App流量测试--使用安卓自身提供的TCP收发长度统计功能

    在Linux系统有3个地方保存流量统计文件,对于Android系统同样也适用: (1)在/proc/net/dev下可以查看各个网络接口的收发流量  (等同adb shell cat /proc/pi ...