有时候,由于各种原因,在操作系统中我们可能需要安装多个版本的Python解释器。同样地,我们也可能需要使用不同版本的模块,比如Django 1.8和Django 1.11。再加上pip工具管理器版本的混乱问题,这使得许多人在Python环境管理方面感到非常困惑。

通常情况下,每个项目甚至每个项目的不同阶段都需要不同的Python解释器和依赖库。为了清晰、可靠地管理这些环境,我们需要为每个项目或应用创建一个"独立隔离"的Python运行环境。

virtualenv 是一种工具,用于为每个项目创建一个"独立隔离"的Python运行环境。

在Python 3.4之前,需要手动单独安装 virtualenv 才能使用它。但是在之后的版本中,Python自带了一个名为 venv 的库,通过执行 python -m venv 命令可以达到与 virtualenv 相同的效果。然而,更多的用户仍习惯使用 virtualenv 的方式。

下图展示了在同一操作系统下使用多个Python解释器环境以及通过 virtualenv 创建的多个虚拟环境的情况:

1.png

核心要点是:

  • 一个操作系统下,可以有多个“操作系统级别的”Python解释器;
  • 每个Python解释器有一个指向自己的pip工具,两者一一对应;
  • 通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;
  • 每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages。

如果你理解了上面几点,就能明白virtualenv和pip在使用上的区别。

安装virtualenv

以下是在Windows操作系统上安装16.0.4版本的virtualenv的示例。如果存在更高版本,有相应的说明,请注意区别。

建议直接使用当前环境变量中指定的pip来安装virtualenv,即使用与操作系统默认的Python版本绑定的pip。这样可以方便地调用命令。通常的安装步骤如下:

pip install virtualenv

可以在命令行界面中验证安装:where virtualenv

2.png

可以看出,这里的virtualenv是作为一个可执行程序,安装在我系统默认的Python36版本下。而我当前操作系统下其实有3个版本的Python:

3.png

你或许有疑问?那我要虚拟Python2.7的版本怎么办?在2.7下也装一个virtualenv?不需要的!virtualenv可以指定虚拟的Python解释器版本,只要你本地操作系统下安装了这个版本!

建立虚拟环境

如果自己手动管理所有的虚拟环境,通常会建立一个目录,用来放置所有的虚拟环境。这里:mkdir d:\Python_virtualenvs,然后运行: virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django

4.png

-p: 指定你要虚拟的Python版本,这里选择了本地的python2.7

–-no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。

d:Python_virtualenvsfor_django:表明在该目录下,建立一个叫做for_django的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁建立的。

我们看一眼文件系统中的情况,从截图中可以看出,环境非常干净!

5.png

6.png

重要说明

截至2020年2月,virtualenv的最新版本(以20.0.0+为例)已经取消了--no-site-packages参数,并默认使用--no-site-packages模式。另外,还有一个参数--system-site-packages,可以访问源Python解释器的库,但要谨慎使用。因此,在这里推荐直接使用默认模式virtualenv -p xxx destination

PS:在Windows下,执行activate.bat命令后,命令提示符前可能没有环境标识符显示。

使用虚拟环境

在命令行中,进入你想要使用的虚拟环境所在的目录中的Scripts文件夹,并运行activate命令。或者可以使用绝对路径的方式调用该命令。

7.png

注意命令提示符(for_django),它表示你当前在for_django这个虚拟环境内。现在,你可以当做一个正常的Python环境使用。例如运行python命令,又或者使用pip安装第三方库pip install requests。这些都被限制和绑定在for_django这个虚拟环境内,不会对操作系统下本地的Python版本和其它的虚拟环境产生任何的影响!

8.png

退出虚拟环境

要退出虚拟环境,只需运行deactivate命令,该命令位于虚拟环境目录下的Scripts(Windows)或bin(Linux)文件夹中。

如果要删除虚拟环境,只需直接删除虚拟环境所在的目录即可。请注意,确保不要意外删除其他环境。但是,请注意,一旦删除虚拟环境,所有以前使用该环境的项目都将受到影响。请在删除之前确保不再需要该环境!

在Linux操作系统下的使用

对于Linux操作系统,使用方法基本相似。不同之处在于虚拟环境中的文件路径和脚本调用方式与Windows系统有所不同。请注意下图中的bin目录,其中提供了一个activate脚本和一个用于移除环境变量的deactivate命令。

9.png

10.png

创建虚拟环境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv

启动虚拟环境: $ source my_venv/bin/activate 

退出虚拟环境: $ deactivate 

删除虚拟环境: $ rm –r my_venv

Pycharm结合virtualenv的使用

windows下的开发,很多时候使用命令行并不是那么方便,尤其是在Pycharm开发环境下,频繁切换界面也是种负担。实际上Pycharm可以指定解释器,直接将项目的Python解释器设置为你要使用的虚拟环境就行,如下所示:

在settings中:

11.png

选择Python:

12.png

virtualenv配合pip快速建立开发环境

virtualenv虚拟环境配合pip的freeze功能,可以一次性快捷的将整个环境下的第三方模块全部记录下来: pip freeze > d:\requirements.txt

13.png

对应的,也可以用它一次性通过在别的机器上或虚拟环境里,将文件里列出的第三方库安装起来。只需要使用命令:pip install -r requirements.txt

标签: python, python下载, Python教程, Python技术, Python学习, Python学习教程, Python语言, Python开发, Python入门教程, Python进阶教程, Python高级教程, Python面试题, Python笔试题, Python编程思想