python多版本管理centos下pyenv+virtualenv

557 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在学习和利用python开发的很多情况下,需要多版本的Python并存。

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

virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题。

首先我们可以用pyenv 安装多个python 版本, 比如安装了2.5, 2.6, 3.3 三个版本。

用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。

这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境。

CentOS下安装(write at 20170117):

以CentOS版本6.7为例(CentOS的其他版本也适用,Ubuntu也适用,只要把yum命令改成apt-get就可以了,其他都一样)

1. 安装依赖包

yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bzip2-devel readline-devel

[root@localhost willie]# yum -y install git gcc make patch zlib-devel gdbm-devel openssl-devel sqlite-devel bzip2-devel readline-devel

  1. 安装pyenv(pyenv-virtualenv插件会自动安装)

安装(下面一条命令可以把pyenv和pyenv-virtualenv插件都装上):

curl -L raw.githubusercontent.com/yyuu/pyenv-… | bash

[willie@localhost ~]$ curl -L raw.githubusercontent.com/yyuu/pyenv-… | bash

设置环境变量: 在/etc/profile.d/pyenv.sh文件里加入下面三行


export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

然后运行:

source /etc/profile.d/pyenv.sh

[willie@localhost ~]$ vim /etc/profile.d/pyenv.sh

[willie@localhost ~]$ source /etc/profile.d/pyenv.sh

使用篇

  1. pyenv使用指南(OS X和Linux命令都通用)

pyenv versions查看系统的上安装的Python版本。 其中前面的*表示当前工作目录正在使用的版本,其中 的 system表示系统自带的 Python 版本:pyenv versions

[willie@localhost ~]$ pyenv versions

  • system (set by /home/willie/.pyenv/version)
  1. 查看可安装的Python版本:

pyenv install --list

[willie@localhost ~]$ pyenv install --list

Available versions:

2.1.3

2.2.3

2.3.7

。。。以下省略五千字

  1. pyenv install 安装其他版本的Python。例如安装2.7.13和3.6.0版本:

pyenv install 2.7.13

pyenv install 3.6.0

pyenv versions #可以看到3个版本

[willie@localhost ~]$ pyenv install 2.7.13

Downloading Python-2.7.13.tar.xz...

-> www.python.org/ftp/python/…

Installing Python-2.7.13...

Installed Python-2.7.13 to /home/willie/.pyenv/versions/2.7.13

[willie@localhost ~]$ pyenv install 3.6.0

Downloading Python-3.6.0.tar.xz...

-> www.python.org/ftp/python/…

Installing Python-3.6.0...

WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

Installed Python-3.6.0 to /home/willie/.pyenv/versions/3.6.0

[willie@localhost ~]$ pyenv versions

  • system (set by /home/willie/.pyenv/version) 2.7.13 3.6.0 4、pyenv local 切换python版本。

示例:

$ cd                   #到home目录

$ mkdir python36      #创建python36的工作目录

$ cd python36

$ pyenv local 3.6.0    #使当前工作目录使用python3.6.0版本

$ python -V            #查看一下当前目录用python的版本,确实是3.5.1

Python3.6.0

$ pip -V               #查看一下pip版本,是3.6的pip

pip 9.0.1 from /home/willie/.pyenv/versions/3.6.0/lib/python3.6/site-packages (python 3.6)

$ cd                   #回到home目录

$ mkdir python2713     #创建python2.7.13的工作目录

$ cd python2713

$ pyenv local 2.7.13      #使当前工作目录使用python3.4.4版本

$ python -V            #查看一下当前目录用python的版本,确实是3.5.1

Python 2.7.13

$ pip -V               #查看一下pip版本,是2.7的pip

pip 9.0.1 from /home/willie/.pyenv/versions/2.7.13/lib/python2.7/site-packages (python 2.7)

其他版本的工作目录创建方法类似(如果是用系统自带版本,用 pyenv local system 即可使当前工作目录使用系统自带的Python2.7.10,不过一般很少用系统自带的Python)

  1. pyenv-virtualenv使用指南

pyenv-virtualenv是用来创建一个干净的虚拟Python环境的命令,通常在创建干净的新项目时候使用。使用方法如下:

1.创建虚拟环境--pyenv virtualenv 版本号 虚拟环境名。

$ pyenv virtualenv 3.6.0 env360

创建项目,让项目使用干净的Python3.5.1的虚拟环境:

$ mkdir myproject

$ cd myproject

$ pyenv local venv-3.5.1

pyenv-virtualenv: deactivate

pyenv-virtualenv: activate venv-3.5.1

此后,我们就会发现:只要我们进入myproject目录,就会自动激活virtualenv,退出myproject目录,就会关闭virtualenv。

如果要关闭自动激活,可以运行命令pyenv deactivate,要重新启用的话,运行pyenv activate 虚拟环境名。

reference:www.jianshu.com/p/1842a3632…

后记(write at 20170217),已经过了一个月,这段时间里,基本没使用过pyenv,做项目都是直接virtualenv、source bin/activate、deactivate,买了两本书《python web 开发实战》(董伟明)、《python 项目开发实战》(日),书里都是用virtualenv,没见提到pyenv的。所以,暂时不打算使用pyenv了。

另外,按之前的步骤安装完pyenv并设置path,重启后每次打开teminal,都会出现bash:pyenv:command can not find的消息,

看着挺碍眼的,每次都是export PATH=$PATH:~/.pyenv/bin手动消除它,

因为今天决定暂时不再用pyenv,所以把 /etc/profile ~/.bash_profile ~/.bashrc /etc/profile.d/pyenv.sh 等文件里的pyenv相关行都注释掉,

然后重启电脑,再打开终端就不再有这个烦人的消息,整个世界清净赛了。