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

Python虚拟环境的创建与管理

钱魏Way · · 388 次浏览

为什么要创建虚拟环境?

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

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

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

venv

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

创建环境

python -m venv ENV_DIR

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

虚拟环境的目录树结构如下(Windows):

.venv
    ├─pyvenv.cfg
    ├─Include
    ├─Lib
    │  └─site-packages
    │      ├─pip
    │      ├─pip-20.2.3.dist-info
    │      ├─pkg_resources
    │      ├─setuptools-49.2.1.dist-info
    │      ├─easy_install.py
    │      └─__pycache__
    └─Scripts
    │  └─activate
    │  └─activate.bat
    │  └─Activate.ps1
    │  └─deactivate.bat
    │  └─easy_install-3.9.exe
    │  └─easy_install.exe
    │  └─pip.exe
    │  └─pip3.9.exe
    │  └─pip3.exe
    │  └─python.exe
    │  └─pythonw.exe

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的虚拟环境,并使用Python 3.9版本,可以使用以下命令:

python3.9 -m venv ~/myenv

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

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

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

其中,C:\Python39\python.exe是Python 3.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

总结

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

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

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

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

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

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

发表回复

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