经常遇到这样的情况:

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

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

安装 pyenv

在终端执行如下命令以安装 pyenv 以及几个插件:

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"'>> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"'>> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ exec $SHELL -l

安装 Python

查看可安装的版本

$ pyenv install --list

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

2.7.8   # Python 2 最新版本
3.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

在 Ubuntu下:

sudo apt-get update
sudo apt-get install make build-essential libssl-dev zlib1g-dev
sudo apt-get install libbz2-dev libreadline-dev libsqlite3-dev wget curl
sudo apt-get install llvm libncurses5-dev libncursesw5-dev

安装指定版本

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

$ pyenv install 3.4.1 -v

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

如果网络不太好,用 pyenv 下载会比较慢,可以先执行该命令,然后到 ~/.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)
3.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 localpyenv 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 更新数据库;

使用 USTC 镜像

如果使用 pip 安装模块时速度比较慢,可以考虑使用中科大 LUG 提供的镜像,可以大大提供 pip 安装模块的速度。

编辑 ~/.pip/pip.conf 文件(如果没有则创建之),将 index-url 开头的一行修改为下面一行:

[global]
index-url = https://pypi.mirrors.ustc.edu.cn/simple

参考

  1. https://github.com/yyuu/pyenv
  2. https://lug.ustc.edu.cn/wiki/mirrors/help/pypi

修订历史

  • 2013-10-04:初稿;
  • 2014-10-07:将 Python 依赖包一段的位置提前;
  • 2016-07-30:使用 pyenv-installer 安装;
  • 2016-10-19:中科大 pypi 镜像;

Python 多版本共存之pyenv的更多相关文章

  1. Python多版本共存之pyenv

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  2. Python多版本共存管理工具之pyenv

    目录 Table of Contents 1. 安装pyenv 2. 安装Python 3.0 使用python 参考 Table of Contents 经常遇到这样的情况: 系统自带的Python ...

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

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  4. [转]Windows下Python多版本共存

    https://blog.csdn.net/dream_an/article/details/51248736 Windows下Python多版本共存 Python数据科学安装Numby,pandas ...

  5. windows配置Python多版本共存

    windows配置Python多版本共存 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近Python开发蛮火的,三年前我的一个运维朋友就告诉我说Python语言将来会很火,当时 ...

  6. Ancoda 下的python多版本共存

    Ancoda 下的python多版本共存 virtualenv python 多版本共存 Pip, Virtualenv 和Fabric 被称为python 的三大神器,Pip 是包管理工具,Virt ...

  7. Windows下Python多版本共存

    Windows下Python多版本共存 Python数据科学安装Numby,pandas,scipy,matpotlib等(IPython安装pandas) 0.0 因为公司项目,需要Python两个 ...

  8. Python多版本共存安装

    Python的安装 进入Python官方网站:www.python.org下载系统对应的Python版本 按照提示步奏安装,安装路径选择自定义,方便查找 安装完成后,按win+R键,输入cmd进入cm ...

  9. 使用pyenv实现python多版本共存

    背景 如果是Ubuntu等桌面系统,都已经更新到了Python较新的版本.但多数生产环境使用的还是红帽系统. CentOS7默认还是Python2.7,而开发环境如果是高版本Python就带来了问题. ...

随机推荐

  1. windows10+mysql8.0.zip安装

    〇.准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环 ...

  2. ThinkPHP框架基础知识二

    一.空操作和空控制器处理 空操作:没有指定的操作方法:空控制器:没有指定控制器,例如: http://网址/index.php/Home/Main/login  正常 http://网址/index. ...

  3. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  4. Linux网络接口配置文件ifcfg-eth0解析

    本文转自:http://blog.csdn.net/jmyue/article/details/17288467 在Windows上配置网络比较容易,有图形化界面可操作.在Linux中往往是通过命令修 ...

  5. 浏览器 Event对象 及 属性 的兼容处理

    摘自: http://blog.csdn.net/jiachunfeng/article/details/6448186 event对象 IE 中可以直接使用 event 对象,而 FF 中则不可以, ...

  6. with as (cte common table expression) 公共表表达式

    SQL中 with as 的用法——使用公用表表达式(CTE)  公用表表达式 (CTE) 可以认为是在单个 SELECT.INSERT.UPDATE.DELETE 或 CREATE VIEW 语句的 ...

  7. CPU与GPU区别 通俗易懂

    转:https://blog.csdn.net/xiaolang85/article/details/51500340 有网友在网上提问:“为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚 ...

  8. 基于SSM的单点登陆05

    springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  9. 函数:生成1-n的随机数组,

    方法很笨,不过可行: #include <stdio.h> /** 功能:获取一个1-n的随机数数组,这些随机数都互不相同 ** 入参:n-表示最大随机数: *randArray -用于储 ...

  10. MySQL性能调优思路

    1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, ...