【python】使用虚拟环境详解

624 阅读14分钟

为什么需要使用虚拟环境

在Python开发中,使用虚拟环境(virtual environment)是非常常见且推荐的做法。这主要是因为虚拟环境可以为不同的项目提供独立的运行环境,从而解决多个项目之间的依赖冲突问题。以下是使用虚拟环境的一些主要原因:

  1. 依赖管理:每个项目可能需要不同版本的库或包。如果所有项目都共享同一套全局安装的包,那么可能会出现版本冲突的问题,导致某些项目无法正常运行。通过创建独立的虚拟环境,每个项目都可以拥有自己的一套依赖包,互不影响。
  2. 环境隔离:虚拟环境可以帮助开发者避免修改系统级别的Python配置,减少对其他应用的影响。这对于维护系统的稳定性和安全性非常重要。
  3. 方便部署:使用虚拟环境可以轻松地复制和迁移项目所需的全部依赖,使得项目的部署更加简单和可靠。只需要将虚拟环境中安装的包列表导出,然后在新的环境中重新安装这些包即可。
  4. 测试和开发:在开发新功能或尝试新的库时,可以在不干扰现有生产环境的情况下进行。这样即使实验失败也不会影响到主要的应用程序。
  5. 简化协作:当团队成员之间共享代码时,确保每个人都在相同的环境中工作是非常重要的。虚拟环境可以确保所有团队成员都使用相同版本的库,从而减少因环境差异引起的错误。

总之,虚拟环境是Python开发中的一个重要工具,它有助于提高开发效率,减少环境相关的问题,是每个Python开发者都应该掌握的基本技能之一。

虚拟环境管理工具汇总

Python 虚拟环境管理器是帮助开发者管理和隔离不同项目依赖的有效工具。通过创建独立的虚拟环境,可以避免不同项目之间的依赖冲突,确保每个项目的环境配置独立且一致。以下是常用的 Python 虚拟环境管理器:

  1. venv

    • 简介venv 是 Python 3.3+ 自带的虚拟环境管理工具。
    • 特点:无需额外安装,直接使用标准库中的模块。
    • 使用python3 -m venv myenv 创建虚拟环境;source myenv/bin/activate 激活虚拟环境。
  2. virtualenv

    • 简介virtualenv 是最早的 Python 虚拟环境管理工具之一。
    • 特点:简单易用,支持 Python 2 和 Python 3。
    • 安装pip install virtualenv
    • 使用virtualenv myenv 创建虚拟环境;source myenv/bin/activate 激活虚拟环境。
  3. conda

    • 简介conda 是一个开源的包管理系统和环境管理系统,支持多种语言,但常用于 Python。
    • 特点:强大的包管理功能,支持多平台(Windows, macOS, Linux)。
    • 安装:下载并安装 Anaconda 或 Miniconda。
    • 使用conda create --name myenv python=3.8 创建虚拟环境;conda activate myenv 激活虚拟环境。
  4. pipenv

    • 简介pipenv 是一个高级的虚拟环境管理工具,旨在简化依赖管理和环境创建。
    • 特点:自动生成 PipfilePipfile.lock 文件,支持自动激活虚拟环境。
    • 安装pip install pipenv
    • 使用pipenv install 创建虚拟环境并安装依赖;pipenv shell 激活虚拟环境。
  5. poetry

    • 简介poetry 是一个现代的包管理和环境管理工具,强调项目管理和依赖解析。
    • 特点:生成 pyproject.toml 文件,支持依赖锁定和版本管理。
    • 安装curl -sSL https://install.python-poetry.org | python3 -
    • 使用poetry new myproject 创建新项目;poetry install 安装依赖;poetry shell 激活虚拟环境。
  6. pyenv

    • 简介pyenv 是一个多版本 Python 管理工具,允许在同一个系统上安装多个 Python 版本。
    • 特点:支持多版本 Python 的切换,与 virtualenv 结合使用效果更佳。
    • 安装:参考官方文档进行安装。
    • 使用pyenv install 3.8.5 安装 Python 3.8.5;pyenv local 3.8.5 设置当前目录下的 Python 版本。
  7. tox

    • 简介tox 是一个通用的虚拟环境管理和测试工具,主要用于自动化测试。
    • 特点:支持多环境测试,适用于 CI/CD 流程。
    • 安装pip install tox
    • 使用:编写 tox.ini 配置文件;tox 运行测试。
  8. hatch

    • 简介hatch 是一个现代的 Python 包管理和环境管理工具,旨在简化开发流程。
    • 特点:支持项目初始化、依赖管理、构建和发布。
    • 安装pip install hatch
    • 使用hatch new myproject 创建新项目;hatch env create 创建虚拟环境;hatch env shell 激活虚拟环境。
  9. pip-tools

    • 简介pip-tools 是一组命令行工具,用于管理 requirements.txt 文件。
    • 特点:支持依赖解析和锁定,确保依赖的一致性。
    • 安装pip install pip-tools
    • 使用pip-compile requirements.in 生成 requirements.txtpip-sync 同步环境。
  10. Huak

    • 简介:Huak 是一个新兴的 Python 包管理和环境管理工具,设计目标是提供更简洁、高效的开发体验。它集成了项目创建、依赖管理、构建和发布的功能,旨在简化开发者的工作流程。

    • 特点

      • 支持项目初始化,可以快速创建新的 Python 项目。
      • 管理项目的依赖关系,确保开发、测试和生产环境的一致性。
      • 提供构建和发布功能,方便将包上传到 PyPI 或其他仓库。
      • 支持多平台,包括 Windows、macOS 和 Linux。
    • 安装pip install huak

    • 使用

      • 创建新项目:huak new myproject
      • 创建虚拟环境:huak env create
      • 激活虚拟环境:huak env shell
  11. Pixi

    • 简介:Pixi 是一个轻量级的 Python 虚拟环境管理工具,专注于简单性和易用性。它可以帮助开发者轻松地创建和管理多个虚拟环境,而无需担心环境冲突。

    • 特点

      • 快速创建和切换虚拟环境。
      • 支持自动激活和去激活虚拟环境。
      • 集成 pipvenv,提供一致的用户体验。
      • 支持多种配置选项,满足不同开发需求。
    • 安装pip install pixi

    • 使用

      • 创建新项目:pixi new myproject
      • 创建虚拟环境:pixi env create
      • 激活虚拟环境:pixi env activate
  12. Rye

    • 简介:Rye 是一个现代化的 Python 包管理和环境管理工具,旨在提高开发效率。它不仅提供了虚拟环境管理功能,还集成了依赖管理和项目构建工具,使开发过程更加流畅。

    • 特点

      • 支持项目初始化,可以快速创建新的 Python 项目。
      • 管理项目的依赖关系,确保环境的一致性。
      • 提供构建和发布功能,方便将包上传到 PyPI 或其他仓库。
      • 支持多平台,包括 Windows、macOS 和 Linux。
    • 安装pip install rye

    • 使用

      • 创建新项目:rye new myproject
      • 创建虚拟环境:rye env create
      • 激活虚拟环境:rye env shell
  13. uv

    • 简介:uv(Universal Virtualenv)是一个跨平台的 Python 虚拟环境管理工具,旨在简化虚拟环境的创建和管理。它支持多种环境管理方式,包括 venvvirtualenvconda,为开发者提供了灵活的选择。

    • 特点

      • 支持多种虚拟环境管理方式,如 venvvirtualenvconda
      • 创建虚拟环境的速度比 venv 快 80 倍,比 virtualenv 快 7 倍,并且不依赖于 Python。
    • 安装pip install uv

    • 使用

      • 创建新项目:uv new myproject
      • 创建虚拟环境:uv env create
      • 激活虚拟环境:uv env activate

下面将介绍一下 Python 3.3+ 自带的虚拟环境管理工具 venv 的使用,后面会单独写一篇文章介绍最新的最快的虚拟环境管理器的 UV 的使用

虚拟环境管理器venv的使用

创建虚拟环境

venv是 Python 3.3 及以上版本自带的模块,用于创建轻量级的虚拟环境。

python3 -m venv myenv

这将在当前目录下创建一个名为myenv的虚拟环境。激活这个环境后,就可以在这个环境中安装和管理项目所需的所有包了。

激活虚拟环境

激活虚拟环境的命令根据操作系统有所不同:

  • 在Windows上:
myenv\Scripts\activate
  • 在Unix或MacOS上:
source myenv/bin/activate

在Python中激活虚拟环境后,使用该环境中安装的pythonpip非常直接。以下是具体步骤:

  1. 使用虚拟环境中的Python

一旦虚拟环境被激活,你可以通过直接调用 python 来使用虚拟环境中的Python解释器。例如:

python --version

这将显示虚拟环境中Python的版本信息。

  1. 使用虚拟环境中的Pip

同样,你可以通过直接调用 pip 来使用虚拟环境中的包管理工具。例如:

  • 安装包:
pip install requests
  • 查看已安装的包:
pip list
  • 卸载包:
pip uninstall requests -y
  1. 验证是否在虚拟环境中

你可以通过以下命令来验证当前是否在虚拟环境中:

which python  # macOS/Linux
where python  # Windows

这些命令会显示当前使用的Python解释器的路径。如果路径指向你的虚拟环境目录(如 venv/bin/pythonvenv\Scripts\python.exe),则说明你确实在虚拟环境中。

  1. 退出虚拟环境

当你完成工作并希望退出虚拟环境时,可以使用以下命令:

deactivate

这将关闭虚拟环境,并恢复到系统默认的Python环境。

总结

  • 激活虚拟环境:source venv/bin/activate (macOS/Linux) 或 .\venv\Scripts\activate (Windows)
  • 使用虚拟环境中的Python:python
  • 使用虚拟环境中的Pip:pip
  • 验证是否在虚拟环境中:which python (macOS/Linux) 或 where python (Windows)
  • 退出虚拟环境:deactivate

删除虚拟环境

在 Python 中删除一个虚拟环境其实非常简单,只需删除该虚拟环境所在的文件夹即可。这里有一个步骤指南来帮助你完成这个过程:

  1. 确定虚拟环境的位置

首先,你需要知道你的虚拟环境位于哪个目录下。通常,当你创建一个虚拟环境时,你会指定一个目标目录来存放它。例如,如果你使用 venv 模块创建了一个名为 myenv 的虚拟环境,那么这个环境可能位于你的项目根目录下的 myenv 文件夹中。

  1. 退出虚拟环境(可选)

虽然这一步不是必须的,但有时候确认当前没有激活需要删除的虚拟环境是个好习惯。你可以通过以下命令来激活或检查当前激活的虚拟环境:

  • Windows:
myenv\Scripts\activate
  • macOS/Linux:
source myenv/bin/activate

如果当前激活的是你想要删除的虚拟环境,请先将其停用:

  • 所有平台:
deactivate
  1. 删除虚拟环境

一旦确定了虚拟环境的位置并且已经停用了它,你就可以直接删除对应的文件夹了。根据你的操作系统,可以使用以下命令:

  • Windows:
rmdir /s /q path\to\myenv
  • macOS/Linux:
rm -rf path/to/myenv

这里,path\to\myenvpath/to/myenv 应替换为你的虚拟环境实际所在的路径。

  1. 验证删除

为了确保虚拟环境已经被成功删除,你可以尝试再次激活它。如果系统提示找不到该虚拟环境,则说明删除成功。

激活虚拟环境的原理

使用 source venv/bin/activate 激活虚拟环境的原理主要涉及 shell 环境变量和路径的修改。下面详细解释这一过程:

1. 虚拟环境的创建

首先,当你使用 python -m venv venv 命令创建一个虚拟环境时,Python 会生成一个名为 venv 的目录(你可以自定义这个目录名),这个目录中包含了一个独立的 Python 解释器副本及其相关库文件。

2. activate 脚本的作用

venv/bin 目录下,有一个 activate 脚本(对于 Windows 系统,是 venv\Scripts\activate.bat)。这个脚本的主要作用是修改当前 shell 会话的环境变量,以便将虚拟环境的路径添加到系统的 PATH 变量的最前面。

3. 修改 PATH 变量

当你运行 source venv/bin/activate 命令时,activate 脚本会被执行。它会做以下几件事情:

  • 修改 PATH 变量:将虚拟环境的 bin 目录(即 venv/bin)添加到 PATH 变量的最前面。这样,当你在命令行中输入 pythonpip 时,系统会优先使用虚拟环境中的 Python 解释器和 pip 工具,而不是全局安装的版本。
PATH="venv/bin:$PATH"
  • 设置 VIRTUAL_ENV 环境变量:记录当前激活的虚拟环境的路径,方便后续操作。
VIRTUAL_ENV="/path/to/your/venv"
  • 修改提示符:通常情况下,activate 脚本还会修改 shell 提示符,显示当前激活的虚拟环境的名称。例如,如果你的虚拟环境名为 venv,那么提示符可能会变成 (venv) your_username@hostname:~$
if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ]; then
  _OLD_VIRTUAL_PROMPT="$PS1"
  PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
fi

可以通过下面的命令查看修改后的 PATH 环境变量:

echo $PATH

4. 退出虚拟环境

当你不再需要使用虚拟环境时,可以运行 deactivate 命令来退出虚拟环境。deactivate 命令会恢复 PATHPS1 环境变量到激活虚拟环境前的状态。

deactivate

通过 source venv/bin/activate 命令,你可以在当前 shell 会话中临时修改环境变量,使虚拟环境中的 Python 和其他工具成为默认使用的版本。

使用虚拟环境遇到的问题

虚拟环境已经删除PATH环境变量没有修改

当你在Python中删除了一个虚拟环境,但PATH环境变量仍然指向这个已删除的虚拟环境时,可能会遇到一些问题,比如运行pythonpip命令时出现错误。为了正确处理这种情况,你可以按照以下步骤操作:

1. 检查当前的PATH环境变量

首先,你需要检查当前的PATH环境变量,看看它是否还包含已删除的虚拟环境路径。在不同的操作系统中,检查方法有所不同:

  • Windows:
    打开命令提示符(CMD)或PowerShell,然后输入:
echo %PATH%
  • macOS/Linux:
    打开终端,然后输入:
echo $PATH

2. 从PATH中移除已删除的虚拟环境路径

找到并移除已删除的虚拟环境路径。这可以通过编辑环境变量配置文件来实现。

  • Windows:
    1. 右键点击“此电脑”或“计算机”,选择“属性”。
    2. 点击“高级系统设置”。
    3. 在“系统属性”窗口中,点击“环境变量”。
    4. 在“用户变量”或“系统变量”中找到Path变量,点击“编辑”。
    5. 删除已删除的虚拟环境路径条目,然后保存更改。
  • macOS/Linux:
    编辑你的shell配置文件(如.bashrc, .zshrc等),移除已删除的虚拟环境路径。例如,在.bashrc中:
nano ~/.bashrc

找到类似以下的行,并删除或注释掉:

export PATH="/path/to/deleted/venv/bin:$PATH"

保存文件后,重新加载配置文件:

source ~/.bashrc

3. 验证更改

更改环境变量后,重新打开终端或命令提示符,再次检查PATH环境变量,确保已删除的虚拟环境路径已被移除。同时,尝试运行python --versionpip --version命令,确保它们指向正确的Python和pip版本。

4. 重新激活所需的虚拟环境(可选)

如果你有其他正在使用的虚拟环境,可以重新激活它:

source /path/to/new/venv/bin/activate  # macOS/Linux

.\path\to\new\venv\Scripts\activate    # Windows

通过以上步骤,你可以确保PATH环境变量不再指向已删除的虚拟环境,从而避免相关的问题。

如何创建不同python版本的虚拟环境

在Python开发中,使用虚拟环境可以帮助你管理项目的依赖关系,避免不同项目之间的依赖冲突。创建不同Python版本的虚拟环境可以通过多种工具实现,最常用的是venvvirtualenvconda。下面分别介绍这三种方法:

1. 使用 **venv** 创建虚拟环境

venv 是 Python 3.3 及以上版本自带的模块,用于创建轻量级的虚拟环境。

安装特定版本的 Python

首先,确保你的系统上安装了所需的Python版本。你可以从Python官方网站下载并安装多个版本的Python。

创建虚拟环境

假设你想要基于 Python 3.8 创建一个虚拟环境,可以这样做:

python3.8 -m venv myenv

假设你想要基于 Python 3.10 创建一个虚拟环境,可以这样做:

python3.10 -m venv myenv

虚拟环境中的python版本和创建虚拟环境的python版本一致,这里的 myenv 是你为这个虚拟环境选择的名字,可以根据需要更改。

2. 使用 **virtualenv** 创建虚拟环境

virtualenv 是一个更灵活的工具,支持更多的自定义选项。如果你的系统上没有安装 virtualenv,可以通过 pip 安装它:

pip install virtualenv

然后,你可以指定 Python 解释器来创建虚拟环境:

virtualenv -p /usr/bin/python3.8 myenv

这里 **-p** 参数后面跟的是 Python 解释器的路径,你需要根据实际情况调整这个路径,指定不同的python版本路径则会创建对应的python版本的虚拟环境。

  1. 使用 **conda** 创建虚拟环境

conda 是一个开源的包管理系统和环境管理系统,适用于 Windows、macOS 和 Linux。Conda 允许你轻松地安装包和管理环境,而不仅仅是 Python 包。

安装 Miniconda 或 Anaconda

首先,你需要安装 Miniconda 或 Anaconda。访问它们的官方网站进行下载和安装。

创建虚拟环境

使用 conda 创建一个特定版本的 Python 虚拟环境非常简单:

conda create --name myenv python=3.8

这里的 myenv 是你的环境名称,python=3.8 指定了 Python 的版本。

激活和停用虚拟环境

激活虚拟环境

  • 对于 venvvirtualenv
source myenv/bin/activate  # 在 Unix 或 macOS 上
.\myenv\Scripts\activate  # 在 Windows 上
  • 对于 conda
conda activate myenv

停用虚拟环境

  • 对于所有类型:
deactivate

通过这些步骤,你可以轻松地为不同的项目创建和管理多个不同版本的 Python 虚拟环境。

参考文档

11款Python虚拟环境管理器详细攻略,总有一款适合你