Python 虚拟环境

admin
admin 5月28日
  • 在其它设备中阅读本文章

默认情况下,Python 的依赖包会安装到相同的位置,且不同版本的包不能共存。如果同时开发或运行不同的项目,则可能会存在包冲突问题,要么修改代码使不同的项目都使用相同版本的包,要么使用虚拟环境。

Python 虚拟环境是一种用于隔离不同 Python 项目所需依赖的机制。它允许在同一台机器上同时管理多个 Python 项目,每个项目都可以有自己独立的 Python 版本和依赖库,互不干扰。

使用虚拟环境的好处在于:

  • 可以帮我们快速创建干净、完全隔离的且不同版本的 Python 解释器以便我们能在不同项目中开发;
  • 可以避免因在不同项目中只使用唯一的全局解释器而导致的依赖冲突问题(Dependency Conflicts)。

激活虚拟环境后,python 和 pip 等命令将作用于虚拟环境

一、 venv

venv 是 Python 官方在 Python3.3 版本开始内置的一个标准库模块,让我们可以快速生成一个虚拟环境。现在我们只要下载的 Python 解释器版本在 3.3 及以上就能直接使用,而无需安装其他依赖。
使用它的方式十分简单,只需要通过使用对应版本的 Python 解释器并运行以下命令即可,比如这里我们以 Python 3.10 版本解释器为例:

$ python3.10 -m venv <your-virtual-environment-name>

通常我们在创建虚拟环境时需,要简单指定一个名称用以存放虚拟环境的内容,所以上述代码中的名称通常就保持和 venv 模块名称一致:

$ python3.10 -m venv venv

通过对应版本的 Python 解释器调用 venv 模块得到的虚拟环境,其版本也与解释器保持一致,也即在创建的 venv 目录中期 Python 解释器也为 3.10。并且在不指定目录的情况下,默认会在当前运行命令的目录中创建虚拟环境。

目前像 Pycharm 这样的 IDE 或 VS Code 类似的文本编辑器(需要安装插件)已经会正确识别到 venv 目录,并在运行代码时自动帮我们切换到虚拟环境中。

但如果我们是在终端上切换虚拟环境,那么就需要自己进行手动激活(Active)。由于 venv 模块创建的虚拟环境目录在 Linux 和 Windows 内容有所不同,所以就导致二者在激活虚拟环境时的命令也有所差异。

# Linux
$ source venv/bin/activate
# Windows
$ .\venv\Scripts\activate.bat

当然,如果我们想要退出虚拟环境,要么直接关闭 IDE,要么直接在终端命令行界面输入 deactivate 命令即可(或是同样关闭终端)。

$ deactivate

activate 文件有多个版本,当在 windows 系统时,如果用 CMD 时,使用 activate.bat;如果用 PowerShell 时使用 activate.psl

二、 pipenv

pipenv 将包管理工具 pip 和 venv 有机地结合到了一起,实现了开发环境和生产环境依赖的分离,旨在构建专属于 Python 的开发工作流,达到类似于 npm,yarn 等工具的效果。

安装:

pip install pipenv

基本用法:

  1. 创建环境:pipenv install
  2. 激活环境:pipenv shell
  3. 退出环境:exit
  4. 删除环境:pipenv --rm

pipenv install 命令会根据系统默认 Python 版本来创建虚拟环境,并生成用于依赖包管理的 Pipfile 和 Pipfile.lock 文件。当你将项目分享给他人的时候,执行 pipenv install 命令会创建一个虚拟环境并自动安装 Pipfile 中指定的依赖包。

和 npm 的 pack-lock.json 类似,pipenv 通过依赖描述文件 Pipfile 来安装和管理依赖

项目包管理:

  1. 安装 requests:pipenv install requests
  2. 安装所有依赖包:pipenv install
  3. 卸载 requests:pipenv uninstall requests
  4. 卸载所有依赖包:pipenv uninstall --all