在日常开发中,如果能灵活使用Python虚拟环境(virtual environment),可以解决不少烦人的问题。使用Python虚拟环境,可以让你在同一台电脑上使用不同版本的库(library),并可以方便地切换。比如我们现在稳定运行的版本是Django ,如果我们想将其更新到Django ,则可以使用虚拟环境。我们可以在不同的虚拟环境里面安装不同版本的Django,那样就可以随时切换到不同版本进行开发和测试。另外如果使用conda来创建虚拟环境,除了可以在不同环境里面使用不同版本的库以外,我们甚至可以在不同的环境里面安装不同的Python版本。
本文重点介绍如何使用virtualenv/venv来创建Python虚拟环境,关于conda的使用,可以参考怎么用conda创建Python虚拟环境。
virtualenv/venv是最常用的创建虚拟环境的命令,相比于conda,其所创建的虚拟环境可移植性更强,体量也小很多。最重要的是,你不需要安装conda。
在Python 2.7里面创建虚拟环境要安装virtualenv库。但Python 2.7已经不再更新,所以这里不对其进行介绍。建议在开发中尽量不要再使用Python 2.7,老的项目如果可以的话也尽量升级到Python 3。Python 3有很多很好用的功能,比如f字符串,支持typing等等。特别是typing已经成为新Python项目的必选,非常重要,后续我也将有专门的文章来介绍Python里面的typing。
创建环境
在Python 3中创建虚拟环境的命令是:
python -m venv .venv-django2
- 1
如果你的机器上同时安装有Python 2和Python 3并且python命令默认启动的是Python 2,则使用这个命令:
python3 -m venv .venv-django2
- 1
虚拟环境创建好后,会在当前目录下生成一个文件夹(.venv-django2)。我们通常不需要改动这个文件夹里面的任何文件,所以一般将其设置为隐藏文件夹,并且要将其加到.gitignore里面去,以让git不追踪该文件夹下的文件。
激活环境和使用环境
虚拟环境创建后并不会自动激活,使用下面的命令进行激活:
# Linux and MacOS
source .venv-django2/bin/activate
# Windows
.venv-django2\Scripts\
# (.venv-django2) C:\Users\......
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在虚拟环境被激活以后,可以看到命令行的最左边会显示(.venv-django2),这就说明我们当前正在该虚拟环境下。这时我们进行的任何操作都只发生在该环境下,所安装的任何库也只会安装在这个环境里。我们可以用pip命令来安装库:
pip install Django==2.2.17
- 1
通常在一个虚拟环境里会安装多个库,可以用这个命令来查看该环境下所安装的库:
pip freeze
- 1
我们只安装了Django,另外两个库是Django所需要的,是在安装Django时自动安装的。
移植及共享环境
使用虚拟环境的一大好处就是便于移植和共享,我们在创建一个虚拟环境后,可以将虚拟环境的设置导出成一个文件,然后在另一台机器上生成完全相同的环境。导出环境的命令是:
pip freeze >
- 1
生成一个相同环境的方法很简单,我们可以新开一个终端,然后生成一个新的环境。如果你在不同的文件夹,可以用完全相同的环境名。如果在同一个文件夹下,环境的名字就得唯一了。这里为了操作方面我们在同一个文件夹下生成一个不同的环境:
python -m venv .venv-django2-clone # use python3 if needed
# Linux and MacOS
source .venv-django2/bin/activate
# Windows
.venv-django2\Scripts\
- 1
- 2
- 3
- 4
- 5
- 6
- 7
因为我们在同一文件夹下,所以不需要拷贝,如果在不同的文件下则需要将拷到相应的文件夹下。使用以下命令在新环境里安装所需的库:
pip install -r
pip freeze
# Django==2.2.17
# pytz==2020.5
# sqlparse==0.4.1
- 1
- 2
- 3
- 4
- 5
- 6
我们可以看到这两个环境里面的库是完全一样的。
停用及删除环境
当一个环境被激活后,该环境的影响是全局性的,也就是说该环境里面的命令在任何地方都能跑,并不局限于其所处的文件夹内。当你不想使用虚拟环境时,可以用deactivate命令停用该环境。如果你不想用某个环境时,你可以将该环境所在的文件夹删除。但是需要注意的是,在删除环境文件夹之前,务必停用该环境,不然有些命令将不能正常使用。这时你将需要重置环境变量,简单的处理方法就是将终端关掉再重新打开。
结语
到这里为止我们详细地介绍了如果创建、使用和删除环境,我想你应知道已经如何创建一个Django 3环境了,我们只需在以上命令中将环境名和库的名字做适当改动即可,其他命令是一样的。