在开发python应用程序的时候,系统安装的python3只有一个版本:3.4。所有的第三方的包都回被pip安装到python3的site-packages目录下。
如果我们要要同时开发多个应用程序,那这些应用都共用一个python,就是安装在系统的python3。如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办?
这种情况下,每个应用需要各自拥有一套“独立”的python运行环境。有两个常用工具用于创建python“独立”环境:
- venv is available by default in Python 3.3 and later, and installs pip and setuptools into created virtual environments in Python 3.4 and later.
- virtualenv needs to be installed separately, but supports Python 2.7 and Python 3.3 , and pip, setuptools and wheel are always installed into created virtual environments by default (regardless of Python version).
virtualenv
https://virtualenv.readthedocs.io/en/latest/
virtualenv is a tool to create isolated Python environments.
创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库
安装Virtualenv
$ pip install virtualenv
创建virtualenv
假定我们要开发一个新的项目,需要一套独立的python运行环境,可以这么做:
- 在项目目录下,创建一个独立的python运行环境,命名为 venv
virtualenv venv #创建一个名为ENV的目录, 并且安装了ENV/bin/python,创建了lib,include,bin目录,安装了pip
- lib,所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/下
- bin,bin/python是在当前环境是使用的python解释器
如果在命令行中运行virtualenv --system-site-packages ENV, 会继承/usr/lib/python2.7/site-packages下的所有库, 最新版本virtualenv把访问全局site-packages作为默认行为
default behavior.
virtualenv --no-site-packages venv
加上了参数--no-site-packages,这样,已经安装到系统python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的pyhton运行环境。
可以使用-p PYTHON_EXE选项在创建虚拟环境的时候指定python版本
#创建python2.7虚拟环境
virtualenv -p /usr/bin/python2.7 ENV2.7
#创建python3.4虚拟环境
virtualenv -p /usr/local/bin/python3.4 ENV3.4
激活virtualenv
新建的python环境被放到项目录下的venv目录,有了 venv 这个python环境,就可以用source进入该环境:
source ./venv/bin/activate
或者是
source ./venv/Scripts/activate
注意查看activate命令被放在了哪个目录下。
执行上面的命令后,可以看懂命令指示符变了,有个 (venv) 前缀,表示当前环境是一个名为 venv 的python环境,下面可以正常安装各种第三方包,并运行python命令。
在venv 环境下,用 pip 安装的包都在安装到了 venv 这个环境下,系统python环境不受任何影响,也就是说, venv环境是专门针对当前项目创建的。
关闭virtualenv
退出venv 环境,使用 deactivate 命令:deactivate
viratualenv是如何创建“独立”的python运行环境呢?其实就是把系统python复制一份到virtualenv的环境,用命令 source 进入一个virutalenv环境时,virtualenv会修改相关环节变量,让命令python和pip均指向当前的virtualenv环境。
venv
venv不用安装,不过需要python3.3以上。创建一个独立的python运行环境,命名为venv
python3 -m venv ./venv
上面的命令会在当前目录下创建一个名为venv的python环境中。进入和退出该环境的方式和virtualenv一致。
参考文档:
https://packaging.python.org/tutorials/installing-packages/#creating-virtual-environments 官方文档