虚拟环境

阅读 30

Python 生态有大量实用的第三方库,比如 Django、NumPy、requests 等。在开发 Python 项目时会用到许多第三方库,而且库的版本可能不一致。比如 A 项目依赖 a 1.0 ,b 2.0 版本,B 项目依赖 a 2.0 ,c 1.5 版本,如果 A、B 使用同一个运行环境,那么就会出现以来冲突。

为了解决这个问题,Python 有一套虚拟环境的解决方案 virtualenv,为每个项目提供一个隔离的环境。virtualenv 的原理就是改变环境变量,当激活虚拟环境时,virtualenv 会把 python,pip 等命令指向虚拟环境中的 python 和 pip,从而达到不使用系统中的 python 环境的目的。

Windows 上使用 virtualenv

打开 PowerShell,使用 Get-Command 命令查看当前 Python 程序的位置。

然后创建项目文件夹:

PS C:\test> mkdir app


    目录: C:\test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2020/10/7     14:50                app


PS C:\test> cd app
PS C:\test\app> python -m venv venv
PS C:\test\app> ls .\venv\


    目录: C:\test\app\venv


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2020/10/7     14:50                Include
d-----         2020/10/7     14:50                Lib
d-----         2020/10/7     14:50                Scripts
-a----         2020/10/7     14:50            117 pyvenv.cfg


PS C:\test\app> .\venv\Scripts\activate.bat

在 app/venv/Scripts 文件夹下包含当前虚拟环境的可执行文件。运行 activate.bat 可以激活虚拟环境,运行 deactivate.bat ,可以关闭虚拟环境。如果需要直接使用虚拟环境中的 Python,可以使用 app/venv/Scripts/python.exe 。

Mac/Linux 上使用 virtualenv

打开 终端,检查当前 Python 位置。

➜  which python
/usr/local/python3.9/bin/python

创建项目文件夹:

➜  mkdir app
➜  cd app

然后创建虚拟环境:

➜  python -m venv venv

python 是当前系统的 Python 程序,-m 表示指定模块,venv 表示使用 venv 模块,第二个 venv 表示当前虚拟环境的文件夹名称。

➜  python3 -m venv venv
➜  ls
venv
➜  cd venv
➜  ls
bin        include    lib        pyvenv.cfg

执行命令之后,可以看到 app 目录下多了一个 venv 文件夹。进入 venv 文件夹,看到 bin、include、lib 文件夹和 pyvenv.cfg 文件。bin 文件夹中存放可执行文件, lib 文件夹存放库,pyvenv.cfg 纪录当前环境的信息。

使用 source 命令激活当前虚拟环境:

➜  source venv/bin/activate
(venv) ➜  which python
/Users/tiankong.ai/test/app/venv/bin/python 
(venv) ➜  deactivate
➜  app which python
/usr/local/python3.9/bin/python

可以看到,激活虚拟环境之后,python 已经不是原来的那个位置的程序了。而执行 deactivate 关闭虚拟环境之后,python 回复原状。