使用VirtualEnv虚拟环境
概述
说VirtualEnv是Python的一大神器不足为过,如果你在生活中也有那么一点点的“洁癖”,相信你会喜欢上这个东西。
我们知道使用Python的过程中会安装各种库、包,甚至有时候还需要Python2和Python3两种环境混合使用,慢慢的你的Python运行环境会越来越臃肿,这倒还是其次,最可怕的是,有些应用会使用到某个Python包的特定版本,我们知道同一个Python运行环境里面是不能存在同一个包的不同版本的。所有这些都是你为什么要使用VirtualEnv的理由。
VirtualEnv给你一个干净的Python运行环境,并给你不同的应用使用不同版本的包文件提供了可能,甚至使用它可以让Python2和Python3和谐地共存。对于我来说,我用它的原因主要有以下几点:
- 我需要一个干净的Python环境,这个环境只针对我目前开发的应用;
- 我不希望多安装一个和项目无关的包,也不希望出现和其它应用有包版本冲突的问题;
- 我还需要生成一个requirements.txt用来告诉其他人我项目的依赖;
- 我不希望使用pyinstaller打包发布的过程中,给我加进来一堆没有用处的文件。
开始使用
通常我们这样使用VirtualEnv:找到你的应用代码根目录,输入virtualenv venv,这样就在代码根目录下生成了一个venv目录,这里面包含了一个干净的Python环境。
激活venv环境
生成venv目录后,我们使用下面的命令激活virutalenv。
Windows
D:\dev>venv\Scripts\activate
Linux
$ source /home/user/dev/venv/bin/activate
使用source命令能够避免activate没有执行权限的问题,如果有执行权限可以去掉source。
生成requirements.txt
在venv提示符下,输入以下命令即可生成支持库清单文件:
(venv)D:\dev>pip freeze > requirements.txt
如果需要还原requirements.txt所描述的Python环境,只需要在(另一个)venv提示符下,输入以下命令:
(venv)D:\dev>pip install -r requirements.txt
在PyCharm中使用虚拟环境
PyCharm可能是现今最流行的Python集成化开发环境了,PyCharm功能强大,可以让你的Python开发事半功倍,更重要的是它免费的Community版本其实已经足够好用了,虽然官方文档中指出Community版本不支持Web开发,但实际应用中我们发现它能很好的对Flask应用进行调试,而且Community版本还支持SVN等团队协同方案,真是赚到了。
PyCharm支持VirtualEnv这一重要特性,它通常会在代码根目录寻找venv目录,尝试把它作为Python的虚拟运行环境,但一些情况下PyCharm对虚拟环境的定位可能会失败,这时候需要手动设置虚拟环境,步骤如下。
第一步:打开工程,选择File->Settings。
第二步:选择Prject:xxx下面的Project Interpreter。
第三步:点击右侧的齿轮图标,选择Add Local。
第四步:定位到venv目录中的python.exe。
最后确认这些操作,设置完成。
PyCharm还会检索根目录中的requirements.txt,并对其中标示的包进行检查,如果在当前的Python环境中没有找到这些包会产生警告,可以根据实际情况安装这些包或者忽略警告。
Flask开发中的应用
我们知道Flask是一个微型框架,它就像胶水,把你需要的各种组件粘合起来,因此Flask开发过程中,哪怕是一个小小的应用都需要我们安装数量不小的扩展包。而Flask的开发环境通常和生产环境是分开的,也就是我们总有一天要涉及到把开发完成的Flask应用迁移到生产环境中去,这就涉及到到如何快速迁移部署的问题。于是,你应当很自然的想到,使用virutualenv对Flask应用进行包管理再好不过了。
在虚拟环境中安装Flask
Flask依赖两个核心组件,werkzeug和jinja2,其中一个是作为其基础的wsgi,另一个是其默认的模板引擎。如果你用pip安装flask,那么它会自动为你安装好这两个必备组件。
运行下面的命令在虚拟环境中安装flask:
(venv)D:\dev>pip install flask
安装Flask扩展
使用Flask过程中不可避免地要安装许多Flask扩展库,Flask扩展库的命名方式还是有一定规律的,如果运行Flask程序时出现以下错误提示,通常是没有安装相应的插件:
ImportError: No module named flask.ext.login
我们注意一下模块名称是flask.ext.login,按照flask插件的命名规范,对应的软件包是flask-login。使用pip安装即可。
(venv)D:\dev>pip install flask-login
下一节我们将介绍Flask的Helloworld。