python的虚拟环境virtualenv介绍
laoyan 2018-01-02 15:13:03
分 享


使用简介


如果我们要同时开发多个应用程序,如果开发的应用都公用同一个python版本,则就不需要使用virtualenv。如果应用A需要python版本2.7,而应用B需要版本3怎么办。这个时候就需要每个应用各自拥有一套“独立”的Python运行环境。virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境,解决不同应用间多版本的冲突问题。


安装方法


pip install virtualenv

//或者由于权限问题使用sudo临时提升权限

sudo pip install virtualenv


使用方法


1、创建环境


切换到任意目录下如在/lybbndir/ 目录下执行


virtualenv lybbntest


这样就会在lybbndir目录下创建环境,环境名称为lybbntest。如上命令系统默认会复制一些python的第三方包到本目录中。如果不想要这些第三方包,可以使用--no-site-packages参数。


virtualenv --no-site-packages lybbntest


这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境,可以看到这个项目中有哪些目录


lysmac:lybbn lybbn$ cd lybbntest/
lysmac:lybbntest lybbn$ ls -la
total 8
drwxr-xr-x   7 lybbn  staff  224  1  2 14:56 .
drwxr-xr-x   6 lybbn  staff  192  1  2 14:56 ..
lrwxr-xr-x   1 lybbn  staff   79  1  2 14:56 .Python -> /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/Python
drwxr-xr-x  16 lybbn  staff  512  1  2 14:56 bin
drwxr-xr-x   3 lybbn  staff   96  1  2 14:56 include
drwxr-xr-x   3 lybbn  staff   96  1  2 14:56 lib
-rw-r--r--   1 lybbn  staff   60  1  2 14:56 pip-selfcheck.json


目录介绍:

lib目录:所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/下

bin目录:是在当前环境是使用的python解释器


2、激活环境


进入环境名称目录中(本例以linux下为例)


cd lybbntest
source ./bin/activate
(lybbntest) lysmac:bin lybbn$


这时就会激活lybbntest虚拟环境了,可以在本环境中正常使用python安装第三方包了。在venv环境下,用pip安装的包都被安装到venv这个环境下(本案例是第三方包都被安装在了lybbntest目录下),系统Python环境不受任何影响。也就是说,venv环境是专门针对lybbntest这个应用创建的。


3、退出环境


当你想退出该环境的时候,需要在上一步骤的目录中执行deactivate,来结束本环境。

deactivate


4、指定python版本


可以使用-p PYTHON_EXE(python程序所在的完整目录绝对路径)选项在创建虚拟环境的时候指定python版本


(1)创建python2.7虚拟环境


virtualenv -p /usr/bin/python2.7 lybbntestenv2.7


(2)创建python3.6虚拟环境


virtualenv -p /usr/local/bin/python3.6 lybbntestenv3.6


原理简介


virtualenv是如何创建“独立”的Python运行环境的?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv(虚拟项目名称目录)/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境


我要小额支持下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

取消
吐槽一下

游客

所有吐槽
  • 暂时还没有吐槽,赶紧来吐槽!