Python linux多版本共存以及虚拟环境管理

2017年08月01日 18:42:25 sliderSun 阅读数:197更多

个人分类: python
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37947156/article/details/76549769

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

安装pyenv

  1.  
    $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
    现在是这个地址: https://github.com/pyenv/pyenv.git
  2.  
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
  3.  
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
  4.  
    $ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
  5.  
    $ exec $SHELL -l

安装Python

查看可安装的版本

$ pyenv install --list

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

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

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

安装Python的依赖包

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

在CentOS/RHEL/Fedora下:

  1.  
    sudo yum install readline readline-devel readline-static
  2.  
    sudo yum install openssl openssl-devel openssl-static
  3.  
    sudo yum install sqlite-devel
  4.  
    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版本

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

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

设置全局的python版本

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

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

确认python版本

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

使用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

虚拟环境的搭建

1.1.1介绍

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:
1. 在没有权限的情况下安装新套件
2. 不同应用可以使用不同的套件版本
3. 套件升级不影响其他应用

1.1.2安装

sudo apt-get install python-virtualenv

1.1.3 使用方法

virtualenv [虚拟环境名称]

如,创建**ENV**的虚拟环境

virtualenv ENV

默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 --no-site-packages建立虚拟环境

virtualenv --no-site-packages [虚拟环境名称]

启动虚拟环境

cd ENV

source ./bin/activate

注意此时命令行会多一个(ENV),ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。

退出虚拟环境

deactivate

在虚拟环境安装Python套件

Virtualenv 附带有pip安装工具,因此需要安装的套件可以直接运行:

pip install [套件名称]

如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:

export PIP_REQUIRE_VIRTUALENV=true

或者让在执行pip的时候让系统自动开启虚拟环境:

export PIP_RESPECT_VIRTUALENV=true

1.2 Virtualenvwrapper

1.2.1介绍

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
1. 将所有虚拟环境整合在一个目录下
2. 管理(新增,删除,复制)虚拟环境
3. 切换虚拟环境
4. ...

1.2.2 安装

sudo easy_install virtualenvwrapper

此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行,先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

1.创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

2.在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs

3.在~/.bashrc中添加行:source /usr/local/bin/virtualenvwrapper.sh

4.运行: source ~/.bashrc

1.2.3 使用

此时virtualenvwrapper就可以使用了。

点击(此处)折叠或打开

1. 列出虚拟环境列表

2. workon

3.

4. 也可以使用

5. lsvirtualenv

6.

7. 新建虚拟环境

8. mkvirtualenv [虚拟环境名称]

9.

10. 启动/切换虚拟环境

11. workon [虚拟环境名称]

12.

13. 删除虚拟环境

14. rmvirtualenv [虚拟环境名称]

15.

16. 离开虚拟环境

17. deactivate

pyenv 安装python 3.7.0时,报编译出错,需要:yum -y install libffi-devel。 别的依赖包基本都装了,所以添加这一个就行了。有的还需要:
yum upgrade

yum dist-upgrade
yum install build-essential python-dev python-setuptools python-pip python-smbus
yum install build-essential libncursesw5-dev libgdbm-dev libc6-dev
yum install zlib1g-dev libsqlite3-dev tk-dev
yum install libssl-dev openssl
yum install libffi-dev

Python linux多版本共存以及虚拟环境管理(转摘)的更多相关文章

  1. Python - 多版本共存与虚拟独立环境

    背景 利用pip直接在本地python环境安装包,基本上都安装到了site_package目录下面. 随着安装的包越来越多,依赖关系也就越来越复杂.不同的项目之间,依赖关系也会出现版本冲突的问题. 此 ...

  2. Python/Anaconda多版本共存的解决方案

    博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址 虽然Python2大势已去,众多项目都已经支持Python3,但总有一些教程和项目只支持Python2.通常情况是计算机里既装着Py ...

  3. Windows 下让 Python 多个版本共存(支持 pip)

    转载自 http://blog.kgzx.net/index.php/archives/40/ 因为类库兼容性的关系,写实际项目时都是用 Python 2,但自己试验性的写点小东西还是喜欢用 Pyth ...

  4. python基础-python解释器多版本共存-变量-常量

    一.编程语言的发展史 机器语言-->汇编语言-->高级语言,学习难度及执行效率由高到低,开发效率由低到高 机器语言:二进制编程,0101 汇编语言:用英文字符来代替0101编程 高级语言: ...

  5. Python 起步 多版本共存配置

    上次我选择的是py2.x,如果我要再装一个py3.x呢 我们去设置环境变量,然后去命令行输入python,这里我故意把环境变量放在第一行,貌似换成3.7了 我们把2.7的放在3.7的前面呢?又换回去了 ...

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

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

  7. Python多版本共存之pyenv

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

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

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

  9. Python 多版本共存之pyenv

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

随机推荐

  1. Android Studio编译报错“java.lang.OutOfMemoryError: GC overhead limit exceeded

    1.在build.gradle添加脚本指定编译堆内存 如果在整个工程中生效,则在build.gradle中增加如下配置: android { .............. dexOptions { i ...

  2. [Linux]Linux read/write

    Read 默认read是block模式,如果想设置非block默认,则open时候参数添加O_NONBLOCK read block模式下,并非等到Buffer满才返回,而是只要有data avaia ...

  3. mongodb应用

    一.概述 NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.NoSQL用于超大规模数据的存储.(例如谷歌或Fa ...

  4. set names utf8;

    对应用程序来说,强制将它们发起的数据库链接设置成UTF8编码有什么办法? 每个链接建立时先执行set names utf8; [mysqld] init-connect=‘set names utf8 ...

  5. myeclipse及Eclipse中.classpath、.project、.settings、.mymetadata(myeclipse特有)介绍

    引言 今天在创建java项目的时候遇到了很多的错误,在解决的过程中遇到了一些根本不知道什么作用的文件,然后按照网上的一些做法可以将问题解决,但是这也说明我们在学习的时候很多基础和细节的地方是我们薄弱的 ...

  6. Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法;关于如何查看 EntityValidationErrors 详细信息的解决方法

    我们在 EF 的编程中,有时候会遇到这样一个错误: 但是,按照他的提示 "See 'EntityValidationErrors' property for more details.&qu ...

  7. db2 order by 利用索引

    ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了.另一个是把结果选好之后再排序. 用有序索引这种,当然是最快的,不过有一些限制条件, ...

  8. excel函数vloopup使用方法

    邮件处理,查找null手机号码  G1=VLOOKUP(F1,A:B,2,FALSE)      H1=VLOOKUP(F1,A:F,7,FALSE)参数1是:查找列,参数2是:范围,参数3是:查找的 ...

  9. Jquery EasyUI Combotree和 EasyUI tree展开所有父节点和获取完整路径

    Jquery EasyUI Combotree展开所有父节点 Jquery EasyUI Combotree获取树完整路径 Jquery EasyUI tree展开所有父节点 Jquery EasyU ...

  10. Linux usb子系统(二) _usb-skeleton.c精析

    "./drivers/usb/usb-skeleton.c"是内核提供给usb设备驱动开发者的海量存储usb设备的模板程序, 程序不长, 通用性却很强,十分经典, 深入理解这个文件 ...