开发工具|给你的项目买份保险:Python虚拟环境

虚拟环境的意义,就如同 虚拟机 同样,它能够实现不一样环境中Python依赖包相互独立,互不干扰。这在必定程度的意义上,给了咱们的项目一份颇有力的保障。在这里,我把它戏称为「保险」。全网惟一。html

举个例子吧。python

假设咱们的电脑里有两个项目,他们都用到同一个第三方包,原本一切都顺利。可是因为某种缘由,项目B因为某些缘由要使用这个第三方包的一些新特性(新版本才有),而若是就这样贸然升级了,对项目A的影响咱们没法评估,这个时候咱们就特别须要有一种解决方案可让项目A和B,处于两个不一样的Python环境中。互不影响。windows

为了方便你们对虚拟环境有个认识,我列举了下其优势:bash

  • 使不一样应用开发环境独立微信

  • 环境升级不影响其余应用,也不会影响全局的python环境app

  • 能够防止系统中出现包管理混乱和版本的冲突python2.7

市场上管理 Python 版本和环境的工具备不少,这里列举几个:ide

  • p:很是简单的交互式 python 版本管理工具。工具

  • pyenv:简单的 Python 版本管理工具。ui

  • Vex:能够在虚拟环境中执行命令。

  • virtualenv:建立独立 Python 环境的工具。

  • virtualenvwrapper:virtualenv 的一组扩展。

工具不少,但我的认为最好用的,当属 virtualenvwrapper,推荐你们也使用。

virtualenv

因为 virtualenvwrapper 是 virtualenv 的一组扩展,因此若是要使用 virtualenvwrapper,就必须先安装 virtualenv。

安装

pip install virtualenv

# 检查版本
virtualenv --version

因为virtualenv建立虚拟环境是在当前环境下建立的。因此咱们要准备一个专门存放虚拟环境的目录。(如下操做在Linux在完成,windows相对简单,请自行完成,有不明白的请微信与我联系。)

建立

# 准备目录并进行
$ mkdir -p /home/wangbm/Envs
$ cd !$

#
建立虚拟环境(按默认的Python版本)
# 执行完,当前目录下会有一个my_env01的目录
$ virtualenv my_env01

#
你也能够指定版本
$ virtualenv -p /usr/bin/python2.7 my_env01
$ virtualenv -p /usr/bin/python3.6 my_env02

#
你确定以为每次都要指定版本,至关麻烦吧?
# 在Linux下,你能够把这个选项写进入环境变量中
$ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7" >> ~/.bashrc

进入/退出

$ cd /home/wangbm/Envs

#
进入
$ source my_env01/bin/activate

#
退出
$ deactivate

删除
删除虚拟环境,只需删除对应的文件夹就好了。并不会影响全局的Python和其余环境。

$ cd /home/wangbm/Envs
$ rm -rf my_env01

注意
建立的虚拟环境,不会包含原生全局环境的第三方包,其会保证新建虚拟环境的干净。

若是你须要和全局环境使用相同的第三方包。可使用以下方法:

# 导出依赖包
$ pip freeze > requirements.txt

#
安装依赖包
$ pip install -r requirements.txt

virtualenvwrapper

virtualenv 虽然已经至关好用了,但是功能仍是不够完善。

你可能也发现了,要进入虚拟环境,必须得牢记以前设置的虚拟环境目录,若是你每次按规矩来,都将环境安装在固定目录下也没啥事。可是不少状况下,人是会懒惰的,到时可能会有不少个虚拟环境散落在系统各处,你将有可能忘记它们的名字或者位置。

还有一点,virtualenv 切换环境须要两步,退出 -> 进入。不够简便。

为了解决这两个问题,virtualenvwrapper就诞生了。

安装

# 安装 - Linux
pip install virtualenvwrapper

# 安装 - Windows
pip install virtualenvwrapper-win

配置
先find一下virtualenvwrapper.sh文件的位置

find / -name virtualenvwrapper.sh
# /usr/bin/virtualenvwrapper.sh

在~/.bashrc 文件新增

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_SCRIPT=/usr/bin/virtualenvwrapper.sh
source /usr/bin/virtualenvwrapper.sh

基本语法
mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] ENVNAME

经常使用方法

# 建立
$ mkvirtualenv my_env01

#
进入
$ workon my_env01

# 退出
$ deactivate


#
列出全部的虚拟环境,两种方法
$ workon
$ lsvirtualenv

#
在虚拟环境内直接切换到其余环境
$ workon my_env02

#
删除虚拟环境
$ rmvirtualenv my_env01

其余命令

# 列出帮助文档
$ virtualenvwrapper

#
拷贝虚拟环境
$ cpvirtualenv ENVNAME [TARGETENVNAME]

#
在全部的虚拟环境上执行命令
$ allvirtualenv pip install -U pip

#
删除当前环境的全部第三方包
$ wipeenv

#
进入到当前虚拟环境的目录
$ cdsitepackages

#
进入到当前虚拟环境的site-packages目录
$ cdvirtualenv

#
显示 site-packages 目录中的内容
$ lssitepackages

更多相关命令内容,可查看官方文档(点击「阅读原文」可直接跳转):
https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html

实战演示

以上内容,是一份使用指南

接下来,一块儿来看看,如何使用在咱们的开发中使用咱们的虚拟环境呢

一般咱们使用的场景有以下几种

  • 交互式中

  • PyCharm中

  • 工程中

接下来,我将一一展现。

交互式中

先对比下,全局环境和虚拟环境的区别,全局环境中有requests包,而虚拟环境中并未安装。
当咱们敲入 workon my_env01,前面有my_env01的标识,说明咱们已经处在虚拟环境中。后面全部的操做,都将在虚拟环境下执行。

image.png



工程项目中

咱们的工程项目,都有一个入口文件,仔细观察,其首行能够指定Python解释器。

假若咱们要在虚拟环境中运行这个项目,只要更改这个文件头部便可。

如今我仍是以,import requests 为例,来讲明,是不是在虚拟环境下运行的,若是是,则和上面同样,会报错。

文件内容:

#!/root/.virtualenvs/my_env01/bin/python

import requests
print "ok"

运行前,注意添加执行权限。

$ chmod +x ming.py

好了。来执行一下

$ ./ming.py

发现和预期同样,真的报错了。说明咱们指定的虚拟环境有效果。

image.png

PyCharm中

点击 File - Settings - Project - Interpreter

image.png


点击小齿轮。如图点击添加,按提示添加一个虚拟环境。而后点 OK 就可使用这个虚拟环境,以后的项目都会在这个虚拟环境下运行。

image.png

好啦!以上就是本期的所有内容。

相关文章
相关标签/搜索