2.6 Python虚拟环境
2.6.1 虚拟环境概述
Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。
这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。
这个问题的解决方案是创建一个 virtual environment,一个目录树,其中安装有特定Python版本,以及许多其他包。
然后,不同的应用将可以使用不同的虚拟环境。要解决先前需求相冲突的例子,应用程序 A 可以拥有自己的安装了 1.0 版本的虚拟环境,而应用程序 B 则拥有安装了2.0 版本的另一个虚拟环境。如果应用程序 B 要求将某个库升级到3.0版本,也不会影响应用程序 A 的环境。
虚拟环境并不是什么新技术,主要是利用了操作系统中环境变量以及进程间环境隔离的特性。
操作系统的环境变量可以为程序提供信息和做信息交换介质,进程可以共享操作系统中的环境变量,也可以为进程指定环境变量,其中 PATH 是很重要的环境变量,用于为操作系统和程序提供可执行文件的访问路径,例如写一个程序a.exe,存放在D:\MyProgram 中,在命令行中执行a.exe,会得到提示“无法找到程序a.exe”,为了让系统找到,可以将D:\MyProgram 路径加入到 PATH 环境变量中,当输入a.exe时,操作系统就会从 PATH 所提供的路径中逐个查找,这时就可以找到了。Linux 和 MacOS 具有相似的特性,甚至比 Windows 的功能更丰富。
Python虚拟环境就是利用这个特性构建的,在激活虚拟环境之时,激活脚本会将当前命令行程序的 PATH 修改为虚拟环境的,这样执行命令就会在被修改的 PATH 中查找,从而避免了原本 PATH 可以找到的命令,从而实现了 Python环境的隔离。
2.6.2 创建虚拟环境
2.6.2.1 通过Python创建虚拟环境
用于创建和管理虚拟环境的模块称为 venv。venv 通常会安装你可用的最新版本的 Python。如果我们的系统上有多个版本的 Python,我们可以在不同版本Python的基础上创建不同的虚拟环境。
要创建虚拟环境,要先确定要放置它的目录,并在命令行中输入以下命令:
>>> Python -m venv tutorial-env
这将创建 tutorial-env 目录,并在其中创建包含 Python 解释器副本和各种支持文件。创建虚拟环境后,我们可以激活它。
>>> tutorial-env\Scripts\activate.bat
激活虚拟环境将改变你所用终端的提示符,以显示你正在使用的虚拟环境,并修改环境以使 Python 命令所运行的将是已安装的特定Python版本。
2.6.2.2 通过Pycharm创建虚拟环境
1、打开文件\新建项目
2、在弹出的新建项目
窗口中,勾选右边的使用此工具新建环境
,然后通过点击右边的下拉框选择用于创建虚拟环境的工具,最后点击右下角的创建
按钮进行创建。
相关工具说明
conda
:
多用作科学计算领域的包管理工具,功能丰富且强大,使用的软件包源是 Anaconda repository 和 Anaconda Cloud,conda 不仅支持 Python软件包,还可以安装 C、C++ 、R 以及其他语言的二定制软件包。除了软件包管理外,还能提供相互隔离的软件环境。
Pipenv
:
Pipenv 是 Kenneth Reitz 在2017年1月发布的Python依赖管理工具,现在由PyPA维护。Pipenv 会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作
Poetry、Pipenv
:
这两个工具类似,除了是Python虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布。你可以把它看做是 Pipenv 和 Flit 这些工具的超集。它可以让你用 Poetry 来同时管理 Python库和 Python程序。