使用 pyenv 和 virtualenv 打造 python 多版本环境

python struggling 1060次浏览 0个评论
文章目录

一,pyenv 和 virtualenv 简介

由于 Centos 自带的 python 为 2.6.6,但是现在一般 python 使用的版本都是 2.7 以上,直接升级 python 会导致 yum 等命令不可用,虽然修改 /usr/bin/yum 可以解决问题,但是总感觉很麻烦。所以就需要使用 python 的多版本管理系统,pyenv 是一个可以进行 python 多版本管理的工具。

还有另一个问题:在开发 Python 应用程序的时候,若系统使用 python 3.4 版本,所有第三方的包都会被 pip 安装到 Python3的site-packages目录下。如果我们要同时开发多个应用程序,这些程序都会共用一个 Python,就是安装在系统的 Python 3 下面的表。如果应用A需要 dajngo1.9,而应用B需要 django1.8 时如何解决?为了解决这种情况,让每个应用都独立运行在自己的 Python 运行环境。virtualenv 就是用来解决这个问题的。

pyenv 和 virtualenv 的关系如下所示:

pyenv

二,安装 pyenv (以下均在 CentOS 6.6 上安装)

首先配置环境变量:

# git clone https://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

安装 python 的依赖包:

# yum install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs -y

指定要安装的 python 版本号:

# pyenv install 2.7.10 -v

# pyenv install 3.4.1 -v

该命令会下载 python 的源代码到 ~/.pyenv/versions/ 目录下,然后执行编译工作。

[root@sta ~]# pyenv versions     #查看当前正在使用的 python 版本
* system (set by /root/.pyenv/version)
  2.7.10
  3.4.4
[root@sta ~]# pyenv rehash    #更新数据库
[root@sta ~]# pyenv global 2.7.10  #设置全局的 python 版本
[root@sta ~]# pyenv versions 
  system
* 2.7.10 (set by /root/.pyenv/version)
  3.4.4

[root@sta ~]# python   # 确认 python 版本
Python 2.7.10 (default, Jun  1 2016, 21:41:46) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

现在系统默认的 python 版本就是 2.7.10 了,yum 也可以正常使用,因为 yum 使用的是 “/usr/bin/python”,我们自己写的 python 用的是 “/usr/bin/env python”,这个对于的就是系统环境中python 2.7.10!

三,安装 virtualenv

[root@sta ~]# pip --version   # 确认 pip 版本号
pip 6.1.1 from /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages (python 2.7)

[root@sta ~]# pip install virtualenv  #安装 virtualenv

使用 pip 安装第三方模块时会安装到 ~/.pyenv/versions/2.7.10 下, 不会和系统模块发生冲突。

[root@sta .pyenv]# find ./  -name virtualenv* 
./shims/virtualenv
./versions/2.7.10/bin/virtualenv
./versions/2.7.10/lib/python2.7/site-packages/virtualenv_support
./versions/2.7.10/lib/python2.7/site-packages/virtualenv.py
./versions/2.7.10/lib/python2.7/site-packages/virtualenv.pyc
./versions/2.7.10/lib/python2.7/site-packages/virtualenv-15.0.2.dist-info

创建一个名为 test_env 的独立的 Python 运行环境:

[root@sta ~]# virtualenv --no-site-packages test_env    
New python executable in /root/test_env/bin/python2.7
Also creating executable in /root/test_env/bin/python
Installing setuptools, pip, wheel...done.

–no-site-packages 表示已经安装到系统 Python 环境中的所有第三方包都不会复制过来。然后进入该环境:

[root@sta ~]# source test_env/bin/activate

安装指定的 django 版本 :

(test_env) [root@sta ~]# pip install django==1.9.6

要想使用不同的 django 版本,再重新创建一个 python 环境重新安装即可,两者的环境互相独立。

使用以下命令退出虚拟环境:

(test_env) [root@sta bin]# deactivate 

使用virtualenvwrapper

上述 virtualenv 的操作其实已经够简单了,但对于开发者来说还是不够简便,所以便有了 virtualenvwrapper。这是 virtualenv 的扩展工具,提供了一系列命令行命令,可以方便地创建、删除、复制、切换不同的虚拟环境。同时,使用该扩展后,所有虚拟环境都会被放置在同一个目录下。

四,安装 virtualenvwrapper

这是 virtualenv 的扩展工具,提供了一系列命令行命令,可以方便地创建、删除、复制、切换不同的虚拟环境。同时,使用该扩展后,所有虚拟环境都会被放置在同一个目录下。

1,安装virtualenvwrapper

pip install virtualenvwrapper

2,设置环境变量

要是没有使用 pyenv 则把下面两行添加到 ~/.bashrc 里。

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
   export WORKON_HOME=$HOME/.virtualenvs 
   source /usr/local/bin/virtualenvwrapper.sh
fi

否则使用以下配置:

if [ -f /root/.pyenv/versions/2.7.10/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs 
    source /root/.pyenv/versions/2.7.10/bin/virtualenvwrapper.sh
fi

注意:pyenv 是自己安装时指定的目录。

其中,.virtualenvs 是可以自定义的虚拟环境管理目录。

然后执行:source ~/.bashrc,就可以使用 virtualenvwrapper 了。

3,使用方法

创建虚拟环境:

mkvirtualenv venv

注意:mkvirtualenv 也可以使用 virtualenv 的参数,比如 –python 来指定 Python 版本。创建虚拟环境后,会自动切换到此虚拟环境里。虚拟环境目录都在 WORKON_HOME 里。

其他命令如下:

lsvirtualenv -b # 列出虚拟环境

workon [虚拟环境名称] # 切换虚拟环境

lssitepackages # 查看环境里安装了哪些包

cdvirtualenv [子目录名] # 进入当前环境的目录

cpvirtualenv [source] [dest] # 复制虚拟环境

deactivate # 退出虚拟环境

rmvirtualenv [虚拟环境名称] # 删除虚拟环境

DevOps-田飞雨 》》转载请注明源地址
喜欢 (1)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址