我们为什么需要virtualenv

许多情况下, 项目中使用的Python环境各异, 不只是有Python2Python3的差异, 还有不同类库版本的差异, 例如BeautifulSoup就有3和4. 当我们在本机上安装好Python 后, 某些时候, 我们不想使自己的Python环境被污染, 同时, 我们也想将本地的环境与 服务器端的环境相统一, 包括Python版本与类库的版本.

不同的开发语言也提供了不同的”容器”形式或是”包管理”形式 包管理: Python中可以使用requirements.txt, Node中有npmpackage.json, Java中有MavenGradle, 这些包管理工具使环境搭建变得尤为简单

容器: Python中有virtualenv, Node中有npmnode_modules, 另外还有近年来流行的Docker, 这些容器可以使本机环境与开发环境隔离开来

不论是”容器”还是”包管理”的形式, 终究是为了将代码的开发或是环境进行 一定程度上的统一, 站在稍高的角度去理解, 这些工具就是为了简化开发而使用 切不可舍本逐末, 重视代码质量才是王道

virtualenv的安装与简单使用

  • 安装virtualenv方法多样, 笔者使用的是Archlinux, 可以简单通过pacman或是Pythonpip进行安装, 使用其它版本的Linux也有不同安装方法, 最不济也能用源码包安装

  • 使用virtualenv

1
virtualenv2 venv    # 建立Python2的环境, virtualenv3为Python3环境

该命令运行过后, 当前文件夹下会产生venv文件夹, 可以通过ls -al查看

  • 启动当前环境
1
source venv/bin/activate

该条命令更新当前的Python环境, 在执行语句过后,

可以看到, 在PS1之前出现了(venv)的标记, 表明我们现在使用的是刚刚新建的环境 此时, 我们可以运行python命令查看, 当前调出的交互式shell运行环境已经不同

virtualenvrequirements.txt配合使用

如果说virtualenv提供了快速新建干净的Python环境的能力, 那么requirements.txt则提供了快速的导入开发环境的能力

  • requirements.txt的使用

    我们使用requirements.txt是为了将类库的导入交给pip去做, 当我们获取项目源码后 如果项目源码中包含有requirements.txt, 我们可以使用如下方式导入类库

1
pip install -r requirements.txt

当然, 最好是在已经用virtualenv建立的环境之下

  • requirements.txt的建立

当我们新建项目时, 总会使用一些类库, 如果是在virtualenv环境下, 我们环境中的类库 为当前所需, 使用如下方式导出

1
pip freeze > requirements.txt

导出后当前目录就会新建requirements.txt的文件, 类似如下

1
2
3
4
appdirs==1.4.0
packaging==16.8
pyparsing==2.1.10
six==1.10.0