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