器→工具, 工具软件, 术→技巧, 研发

Python虚拟环境的创建与管理

钱魏Way · · 954 次浏览
!文章内容如有错误或排版问题,请提交反馈,非常感谢!

为什么要创建虚拟环境?

创建虚拟环境是为了在同一台计算机上,使用不同的Python项目需要的不同版本的Python解释器、第三方库和依赖项,以避免版本冲突和相互影响的问题。虚拟环境是一个独立的Python运行时环境,可以在其中安装和管理项目特定的依赖项,这些依赖项不会影响其他项目。这意味着您可以在同一台计算机上并行开发多个Python项目,并使用不同的依赖项和版本,而无需担心它们之间的冲突。虚拟环境还可以帮助您更轻松地管理依赖项,并确保项目的可移植性和可重复性。例如,您可以将项目和其依赖项打包到一个虚拟环境中,并将其传递给其他人或部署到不同的计算机上,而无需担心依赖项的版本或其他问题。

此外,进行一个新的项目开发,创建一个仅适用于该项目的虚拟Python环境。这样有助于包管理,同时还能非常清晰地列出项目开发用到的所有包,生成一键安装清单,方便后期的部署或复现。

在Python中创建虚拟环境的工具有很多,比如venv、conda等。这些工具可以帮助您轻松地创建、管理和使用虚拟环境。

venv

Python2版本创建虚拟环境常使用一个名为virtualenv的第三方包。从Python3.3以后,标准库就内置了一个名为venv的模块,我们可以用它来创建虚拟环境,完全替换virtualenv。

venv是Python标准库中的一个模块,用于创建轻量级的虚拟环境。虚拟环境是一个独立的Python环境,它包含了Python解释器和独立的包安装目录,允许用户在不同的项目中使用不同版本的Python解释器和包,而不会互相干扰。venv模块是Python3.3引入的,是官方推荐的创建虚拟环境的工具。

主要功能

  • 创建虚拟环境:venv可以在指定目录下创建一个全新的虚拟环境,包含一个Python解释器和标准库的副本。
  • 隔离包安装:虚拟环境中的包安装是独立的,安装在虚拟环境中的包不会影响系统范围内的Python环境或其他虚拟环境。
  • 兼容性:通过虚拟环境,可以使用不同版本的Python和不同版本的依赖包,适应不同项目的需求。
  • 轻量级:虚拟环境只包含必要的文件和目录,不包括多余的工具,因此非常轻量化,占用空间少。

特性与优势

  • 独立性:venv创建的虚拟环境完全独立于系统Python环境,避免了包版本冲突和兼容性问题。
  • 项目隔离:每个项目可以拥有自己的虚拟环境,并且可以根据需要指定特定的Python版本和依赖包,不会影响其他项目。
  • 简易迁移:通过虚拟环境,项目的依赖关系可以轻松管理,并且可以方便地移植到不同的机器上,只需复制虚拟环境并安装依赖包即可。
  • 轻量且快速:venv模块相对于其他虚拟环境管理工具(如virtualenv)更加轻量,创建和激活速度更快。

与virtualenv的区别

  • 内置模块:venv是Python标准库中的一部分,不需要额外安装,而virtualenv是一个第三方工具。
  • 轻量化:venv仅包含基本功能,而virtualenv提供了一些额外的功能,如更广泛的兼容性支持,但也因此稍显复杂。
  • 兼容性:venv只支持Python3,而virtualenv支持Python2和Python3。

创建环境

python -m venv ENV_DIR

ENV_DIR指定存放环境的目录,一般使用venv,这是一个不成文的规定。

虚拟环境的目录树结构:

myenv/
├── bin/ (在Windows上为Scripts/)
│   ├── activate
│   ├── python
│   └── pip
├── include/
├── lib/ (在Windows上为Lib/)
│   └── pythonX.X/
│       └── site-packages/
└── pyvenv.cfg
  • bin/或Scripts/:包含Python可执行文件和激活脚本。
  • include/:包含C语言头文件(如果需要编译C扩展)。
  • lib/或Lib/:包含Python标准库和第三方库。
  • cfg:配置文件,包含关于该虚拟环境的一些基本信息。

pyvenv.cfg是一个配置文件,包含三个参数:

  • home:指向运行命令的Python安装目录;
  • include-system-site-packages:是否使用系统Python环境中安装的包。默认是false,即不使用;
  • version:Python版本号。

激活环境

# Windows
.\ENV_DIR\Scripts\activate
# Unix/macOS
source ENV_DIR/bin/activate

退出环境

deactivate

删除环境

删除整个环境的安装目录即可。

使用venv是时如何指定Python版本?

在使用venv创建虚拟环境时要创建一个名为myenv的虚拟环境,并使用Python3.9版本,可以使用以下命令:

python3.9 -m venv ~/myenv

其中,python3.9是Python3.9解释器的路径。如果Python3.9已经安装在系统路径中,则可以直接使用python3.9命令,否则需要指定完整路径。

在Windows系统上,可以使用以下命令指定Python解释器版本:

C:\Python39\python.exe -m venv C:\path\to\venv

其中,C:\Python39\python.exe是Python3.9解释器的路径。

使用指定版本的Python解释器创建虚拟环境后,该虚拟环境将默认使用该版本的Python解释器。在激活虚拟环境后,可以使用python命令来启动该版本的Python解释器。

pipenv

Pipenv是Python开发者使用的一种虚拟环境管理工具,它是一个基于pip的工具,它不仅管理虚拟环境,而且还能管理依赖和环境变量等,使得Python应用程序的开发、部署和维护变得更加容易。

下面是Pipenv的一些特性和使用方法:

特性

  • 管理虚拟环境和依赖项
  • 自动创建虚拟环境并安装依赖项
  • 自动更新依赖项
  • 管理环境变量
  • 自动生成Lockfile,确保项目依赖项的版本稳定性
  • 通过lock文件实现可重现性
  • 支持多个Python版本和多个依赖项源
  • 支持自动安装Python依赖项和系统依赖项

安装

pip install pipenv

环境管理

  • 创建环境:pipenv install
  • 激活环境:pipenv shell
  • 退出环境:exit
  • 删除环境:pipenv –rm

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

在使用 Pipenv 创建虚拟环境时,可以使用 –python 选项指定要使用的 Python 版本。例如,要创建一个名为 myenv 的虚拟环境,并使用 Python 3.9 版本,可以使用以下命令:

pipenv --python 3.9

如果本地系统中安装了多个 Python 版本,则可以使用该命令指定要使用的版本。如果未安装所需的 Python 版本,则需要先安装所需的 Python 版本,然后再执行上述命令。

在 Pipfile 中指定 Python 版本也是可以的,只需添加如下内容:

[requires]
python_version = "3.9"

这样,在运行 pipenv install 时,将自动为虚拟环境安装指定的 Python 版本。如果 Pipfile 中指定的 Python 版本与本地系统中的 Python 版本不同,则 Pipenv 将自动安装所需的 Python 版本。

包管理

安装包:

  • 用包名安装并写入 Pipfile 的生产环境:pipenv install requests
  • 用包名安装并写入 Pipfile 的开发环境:pipenv install pytest –dev
  • 安装 Pipfile 中列出的所有生产环境包:pipenv install
  • 安装 Pipfile 中列出的所有开发环境包:pipenv install –dev

卸载包:

  • 卸载指定包并从 Pipfile 中移除:pipenv uninstall requests
  • 卸载所有生产环境包(不从 Pipfile 中移除):pipenv uninstall –all
  • 卸载所有开发环境包并从 Pipfile 中移除:pipenv uninstall –all-dev

pipenv –dev 是用于在开发模式下安装依赖项的命令。在使用 pipenv install 命令安装依赖项时,–dev 选项可以将开发依赖项安装到虚拟环境中。开发依赖项通常包括测试框架、代码质量工具等,这些依赖项只在开发环境中需要,而不需要在生产环境中使用。

例如,假设项目需要使用 pytest 和 coverage 作为测试框架和代码覆盖率工具,在安装这些依赖项时可以使用以下命令:

pipenv install --dev pytest coverage

这将安装 pytest 和 coverage 依赖项,并将它们添加到 Pipfile 的 [dev-packages] 部分中。

在使用 pipenv install 命令安装依赖项时,如果未指定 –dev 选项,则默认情况下所有依赖项都被认为是生产依赖项,并且将安装到 [packages] 部分中。如果同时指定了 –dev 选项和 –pre 选项,则安装预发布版本的依赖项。

配置 pypi 镜像

将 Pipfile 和 Pipfile.lock 中对应的 pypi 源(https://pypi.org/simple)修改为国内镜像源,可以解决包下载速度慢的问题。

  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
  • 阿里云:http://mirrors.aliyun.com/pypi/simple/
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  • 豆瓣:http://pypi.douban.com/simple/

poetry

Poetry 是一个 Python 包管理工具,它可以帮助开发人员管理项目依赖项、虚拟环境、构建和发布。它提供了一个简单、一致、可靠的工作流程,使得开发 Python 应用程序更加轻松和愉快。poetry 类似 pipenv,也是一个依赖包管理工具。在 pipenv 上做了一些改进,简化了 Python 开发工作流。当然,也能创建虚拟环境。

以下是 Poetry 的一些主要特点:

  • 自动创建和管理虚拟环境:Poetry 在每个项目中创建和管理虚拟环境,确保依赖项在项目之间隔离,并使得项目之间使用的 Python 版本相互独立。
  • 管理依赖项:Poetry 使用 toml 文件来管理项目的依赖项,并自动解决依赖项之间的版本冲突,确保所有依赖项都能正常工作。
  • 构建和发布:Poetry 提供了一种简单的方式来构建和发布 Python 包,可以打包成 Wheel 或 sdist 格式,上传到 PyPI 或其他支持的包仓库。
  • 支持插件:Poetry 具有丰富的插件系统,可以扩展其功能,例如添加支持其他包管理工具、增强依赖项解析器等。

使用 Poetry 管理 Python 项目的基本工作流程如下:

  • 创建新的项目:使用 poetry new 命令创建新的 Python 项目。
  • 添加依赖项:使用 poetry add 命令添加依赖项,Poetry 会自动将依赖项写入 toml 文件中。
  • 安装依赖项:使用 poetry install 命令安装项目的所有依赖项。
  • 运行应用程序:使用 poetry run 命令运行 Python 应用程序,Poetry 会自动激活虚拟环境并运行应用程序。
  • 构建和发布:使用 poetry build 和 poetry publish 命令构建和发布 Python 包。

Poetry 的一个显著特点是,它不仅仅是一个包管理工具,还是一个完整的 Python 项目管理工具,它可以帮助开发人员管理项目的依赖项、虚拟环境、构建和发布,使得开发 Python 应用程序更加高效、简单和可靠。

安装

pip install poetry

用法

  • 创建环境:先执行 poetry init,一路回车确认。然后使用 poetry shell 创建环境
  • 激活环境:pipenv shell(没有环境就创建环境并激活,有环境就直接激活)
  • 退出环境:exit
  • 删除环境:pipenv env remove <ENV_NAME>(ENV_NAME 可通过 poetry env list 查看)

conda

Anaconda 是一个大型的环境管理系统,支持 Python/R 在内的多种语言。安装 Anaconda 或 Miniconda(精简版)之后就能使用 conda 命令来创建和管理 Python 环境。

Conda 是一个流行的包管理工具,它可以用来管理 Python 虚拟环境。使用 Conda 可以在同一台计算机上安装多个 Python 环境,这些环境可以包含不同版本的 Python 解释器和不同的 Python 包。以下是使用 Conda 管理虚拟环境的一些基本步骤:

安装

在安装 Conda 之前,需要先确认操作系统的位数和版本,以及是否已经安装了 Python。下面是安装 Conda 的一些基本步骤:

  • 下载 Conda:从官方网站(https://www.anaconda.com/products/distribution)下载适合自己操作系统的 Conda 安装包,选择对应 Python 版本的 Conda。
  • 安装 Conda:运行下载的 Conda 安装包,根据提示进行安装。在安装过程中,可以选择将 Conda 添加到系统路径中,这样可以在任何地方都能够使用 Conda 命令。
  • 配置 Conda:安装完成后,可以使用 conda info 命令检查 Conda 的配置情况。在默认情况下,Conda 会使用官方镜像站点进行软件包下载和更新,如果想要更改镜像站点,可以使用 conda config 命令进行配置。

Miniconda 是一个轻量级的 Conda 版本,它只包含了最基本的组件和依赖项,可以让用户根据自己的需要进行选择和安装。下面是在 Windows 系统上安装 Miniconda 的基本步骤:

    下载安装程序:在官方网站(https://docs.conda.io/en/latest/miniconda.html)下载对应操作系统的 Miniconda 安装程序,可以选择 Python 2.x 或 Python 3.x 版本。
  • 运行安装程序:双击下载的安装程序,按照提示进行安装。安装程序将会提示你选择安装路径、添加环境变量和注册 Anaconda 账号等选项,可以根据需要进行选择。
  • 打开 Anaconda Prompt:安装完成后,在开始菜单中搜索并打开 Anaconda Prompt。如果是第一次使用 Anaconda Prompt,需要先运行 conda init 命令,该命令会将 Conda 相关的环境变量添加到系统环境变量中,方便后续的使用。
  • 创建虚拟环境:在 Anaconda Prompt 中使用 conda create 命令创建一个新的虚拟环境,例如:conda create –name myenv python=3.8
  • 激活虚拟环境:创建虚拟环境后,使用 conda activate 命令激活环境,例如:conda activate myenv
  • 安装依赖:在激活虚拟环境后,可以使用 conda install 命令安装需要的依赖包,例如:conda install numpy

Miniconda 安装完成后,可以使用 Anaconda Prompt 运行 Python 程序,管理虚拟环境和安装 Python 包等。如果需要更新 Miniconda 或删除虚拟环境,可以使用 conda update 和 conda remove 命令进行操作。

用法

  • 创建环境 conda create -n ENV_NAME python=3.9
  • 激活环境 conda activate ENV_NAME
  • 退出环境 conda deactivate
  • 删除环境 conda env remove -n ENV_NAME

ensurepip:引导安装pip

ensurepip 是 Python 标准库中的一个模块,用于确保 pip(Python 包管理器)被正确安装和可用。它提供了一种机制,可以在 Python 环境中安装或更新 pip,尤其是在某些环境中(如某些操作系统或环境配置中)pip 可能未预安装的情况下。

主要功能

  • 安装或更新 pip:确保 pip 被安装到 Python 环境中,并且是最新版本。
  • 处理 pip 的安装问题:在一些 Python 环境中,pip 可能不被默认安装,ensurepip 可以帮助解决这些情况,确保 pip 的可用性。
  • 与虚拟环境兼容:可以在创建虚拟环境时确保 pip 的安装,使得虚拟环境中始终有一个有效的包管理器。

特性与优势

  • 确保 pip 可用:ensurepip 确保 Python 环境中有一个可用的 pip,即使在某些系统或配置中,pip 可能未预安装的情况下。
  • 简化虚拟环境管理:在虚拟环境中自动安装 pip,使得虚拟环境的创建和管理更加方便。
  • 自动处理 pip 的安装问题:ensurepip 处理了许多与 pip 安装相关的问题,减少了手动安装 pip 的复杂性。

安装或更新 pip

ensurepip 模块可以安装 pip,如果 pip 已经存在,它会确保它是最新的版本。这通常用于在没有 pip 的情况下安装或更新它。

import ensurepip

# 安装或更新 pip
ensurepip.bootstrap()
ensurepip.bootstrap() 是 ensurepip 模块的核心函数,用于安装或更新 pip。它会自动下载和安装适合当前 Python 版本的 pip。

与虚拟环境的兼容性

ensurepip 在创建虚拟环境时也会使用,以确保每个虚拟环境都有一个正确配置的 pip。当使用 venv 模块创建虚拟环境时,pip 会被自动安装:

python -m venv myenv

在这个示例中,创建虚拟环境 myenv 时,pip 会被自动安装到该虚拟环境中。ensurepip 会在创建虚拟环境时执行,确保 pip 被正确安装。

主要方法和功能

  • bootstrap():安装或更新 pip。如果 pip 已经存在,它会确保其是最新的版本。如果 pip 不存在,它会进行安装。
  • _main()(内部方法):主要用于模块命令行接口,不建议直接调用。

总结

虚拟环境管理方式,每种方式都有其适用的场景和优缺点。以下是一些常见的虚拟环境管理方式及其特点:

  • venv:Python 3.3 及以上版本内置的虚拟环境管理工具,使用方便且易于上手,适合小型项目和个人开发者。但是,它只能管理 Python 环境,不支持多语言和多版本的环境管理。
  • pipenv:一种基于 Pip 和 virtualenv 的虚拟环境管理工具,使用简单,能够自动管理依赖关系,适合中小型项目。但是,它的安装和使用相对较慢,对于复杂项目可能需要手动调整配置文件。
  • poetry:一种新型的 Python 包管理和虚拟环境管理工具,使用简便,能够自动管理依赖关系和版本控制,适合中小型项目和个人开发者。但是,它的生态相对较新,可能存在兼容性和稳定性的问题。
  • Conda:一种通用的包管理和虚拟环境管理工具,支持多语言和多版本的环境管理,适合大型项目和团队协作。但是,它的安装包较大,使用相对较复杂。

不同的项目和开发团队可能有不同的需求和偏好,因此选择适合自己的虚拟环境管理方式非常重要。

除了上述提到的虚拟环境管理工具,还有一些其他的虚拟环境管理工具可供选择,例如:

  • pyenv:一种用于管理多个 Python 版本的工具,可以方便地在不同版本之间切换,适合需要同时使用多个 Python 版本的开发者。
  • virtualenvwrapper:基于 virtualenv 的一种虚拟环境管理工具,提供了一些方便的命令来创建、删除、复制和切换虚拟环境,适合需要频繁创建和切换虚拟环境的开发者。
  • pipx:一种基于 Pip 的工具,可以在隔离的环境中安装和运行 Python 应用程序,适合需要管理多个 Python 应用程序的开发者。

direnv:一种环境变量管理工具,可以根据当前目录自动加载和卸载环境变量,可以与虚拟环境管理工具结合使用,提供更便捷的开发环境。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注