众所周知,Python之所以强大,很大程度上是因为Python有非常多的,用于不同领域的第三方库存在。所以Python程序员也时也被称为:”调包侠”。但这样势必会在第三方包之间造成错综复杂的以来关系。而且同一个第三方包可能还有不同的版本在你的开发环境中同时存在。这样就有肯能会造成一些类似于Window中“DLL黑洞”似的问题。如何解决呢?Python社区给出的方案之一就是使用virtualenv, 为每个项目建立自己的依赖库,并且不同项目的依赖库时彼此完全隔绝的。
安装virtualenv
virtualenv的安装比较简单,可以直接使用pip,当然,前提你已经安装了Python,并且在安装时选择了安装pip
1 | pip install virtualenv |
如果安装正常,你应该可以看到类似的输出
1 | Collecting virtualenv |
你可以执行一下代码,验证virtualenv是否安装正确,是否可用
1 | virtualenv --version |
为项目建立一个隔离的环境
假设你要建立一个基于Flask框架的Web应用,项目名称为: todo-service, 则你可以执行一下代码来构建项目和隔离的环境
1 | mkdir todo-service |
.venv是指定的虚拟环境目录名。如果运行正常,你将看到在todo-service目录中有一个.venv的目录,里面包含了Python运行环境所需要的工具及第三方库,第三方库将被放置到 .venv/Lib/site-packages/ 目录中。
注意:如果你需要在构建虚拟环境时指定Python的版本,可以使用 -p 参数,比如需要指定3.7的版本
1 | virtualenv -p C:\Users\stu\AppData\Local\Programs\Python\Python37 .venv |
激活项目的虚拟环境
经过上面两步,我们已经在构建了todo-service项目,并在项目中建立了虚拟环境。在每次开发前,我们需要为项目激活虚拟环境, 在项目的目录中,执行:
1 | .venv\Scripts\activate.bat |
如果你看到如下新的命令行提示符,则表明环境激活成功
1 | (.venv) E:\todo-service> |
注意命令行开始的”(.venv)”前缀
在激活以后,我们就可以安装项目需要的第三方包了,这些新安装的包和其它的项目时完全隔离的,比如我们要安装Flask, 就简单的执行:
1 | (.venv) E:\todo-service>pip install flask |
运行完毕后,你可以在项目的子目录:”.venv\Lib\site-packages”中找到当前版本的Flaks及其依赖库。