为什么要创建虚拟环境?
创建虚拟环境是为了在同一台计算机上,使用不同的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:一种环境变量管理工具,可以根据当前目录自动加载和卸载环境变量,可以与虚拟环境管理工具结合使用,提供更便捷的开发环境。