python虚拟环境就是让不同的项目有不同的工作环境, 每个项目可以有不同版本的依赖包,而且不同的信赖之间相互隔离. 比如, 项目A依赖package version 1.x 而项目B依赖package version 4.x, 我们就可以创建两个虚拟环境, 分别装上package version 1.x 和4.x就可以了.
virtualenv
vitualenv可以创建隔离的Python环境. 在使用virtualenv时, 它会创建一个目录包含所有的本虚拟环境运行所需要的可执行文件,
通过pip安装virtualenv:
$ pip install virtualenv
检查安装的版本:
$ virtualenv --version
基本用法:
1.为项目创建一个虚拟环境
$ cd project_floder # 打开虚拟环境文件夹放置的地方
$ virtualenv my_project # 会在当前文件夹下创建一个文件夹, 该文件夹下包含Python的可执行文件, 以及一个pip库可以用来安装其安的包. 虚拟环境的名字(在这个例子中, 是my_project, 就是virtualenv后面的文件夹的名字) 可以是任意的.
在创建时可以指定不同的Python解释器的版本:
$ virtualenv -p /usr/bin/python2.7 my_project
或者在~/.bashrc中声明变量VIRTUALENVWRAPPER_PYTHON更改全局的PYthon解释器:
$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
2.激活虚拟环境
$ source my_project/bin/activate
(my_project) [root@localhost venv]#
激活以后当前虚拟环境的名字会显示在最左边的括号里面(如上面所示). 以后再安装的包就会装在my_project
文件夹下, 而不会和全局的python混淆.
安装package
(my_project) [root@localhost venv]# pip install package
3.工作完毕后就可以deactivate.
(my_project) [root@localhost venv]# deactivate
4.删除一个虚拟环境, 仅需要删除文件夹(my_project)即可.
# rm -rf my_project
列出所有创建的虚拟环境:
# virtualenv list
virtualenvwrapper
virtualenvwrapper是virtualenv的一个扩展. virtualenvwrapper可以让创建和管理虚拟环境更加的简单. 当然它也是将所有的虚拟环境需要的文件放在同一个文件夹下.
为了安装virtualenvwrapper首先要安装virtualenv.而且在使用需要执行, source /usr/bin/virtualenvwrapper.sh
, 也可以将上述命令添加到~/.bashrc
中.
$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ source /usr/local/bin/virtualenvwrapper.sh
用法:
1.创建虚拟环境:
# mkvirtualenv my_project
New python executable in my_project/bin/python
Installing Setuptools........................................................................................................................done.
Installing Pip.....................................................................................................................................done.
virtualenvwrapper.user_scripts creating /home/test/.virtualenvs/my_project/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/test/.virtualenvs/my_project/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/test/.virtualenvs/my_project/bin/preactivate
virtualenvwrapper.user_scripts creating /home/test/.virtualenvs/my_project/bin/postactivate
virtualenvwrapper.user_scripts creating /home/test/.virtualenvs/my_project/bin/get_env_details
(my_project) [root@localhost ~]#
创建完成以后, 会直接进入到虚拟环境my_project.
注意:如果没有export WORKON_HOME默认路径在~/.virtualenvs/下.
2. 安装软件包与virtualenv下相同.
(my_project) [root@localhost ~]# pip install django
Collecting django
Downloading Django-1.11.2-py2.py3-none-any.whl (6.9MB)
100% |████████████████████████████████| 7.0MB 82kB/s
Collecting pytz (from django)
Using cached pytz-2017.2-py2.py3-none-any.whl
Installing collected packages: pytz, django
Successfully installed django-1.11.2 pytz-2017.2
- 使用
lssitepackages
列出已安装的软件包.
(my_project) [root@localhost ~]# lssitepackages
django pip pytz-2017.2.dist-info wheel-0.29.0.dist-info
Django-1.11.2.dist-info pip-9.0.1.dist-info setuptools
easy_install.py pkg_resources setuptools-36.0.1.dist-info
easy_install.pyc pytz wheel
- 使用
workon
在不同的虚拟环境下切换.
# 创建虚拟环境my_project2
(my_project) [root@localhost ~]# mkvirtualenv my_project2
New python executable in /root/.virtualenvs/my_project2/bin/python2
Also creating executable in /root/.virtualenvs/my_project2/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /root/.virtualenvs/my_project2/bin/predeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/my_project2/bin/postdeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/my_project2/bin/preactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/my_project2/bin/postactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/my_project2/bin/get_env_details
(my_project2) [root@localhost ~]#
# 可以看到在创建完my_project2时, 已经切换进去, 然后我们重新切换到my_project
(my_project2) [root@localhost ~]# workon my_project
(my_project) [root@localhost ~]#
# workon还可以列出已创建的虚拟环境
(my_project) [root@localhost ~]# workon
my_project2
my_project
注意:virtualenvwrapper提供tab补全功能. 当你创建了许多虚拟环境, 而又无法全部记住它们的名字的时候会非常有用.
5.关闭虚拟环境
$ deactivate
6.删除虚拟环境
$ rmvirtualenv my_project
Removing my_project...
参考
1.Virtual Environmentshttp://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/
2.https://virtualenvwrapper.readthedocs.io/en/latest/index.html