随着项目的复杂度和规模的扩展,不同的库/包很容易引起冲突,而利用Python 2和Python 3中的虚拟环境来管理Python项目,可以有效地处理相关的冲突。
![5aff8a14eb65c15b3a916891677cfa3b.png](https://i-blog.csdnimg.cn/blog_migrate/0307a05c1946318e2766014dfb182796.jpeg)
0.导引
在Python受到开发人员欢迎的所有原因中,最大的原因之一是它对第三方包的广泛和不断扩展的选择。从数据提取和格式化到高速数学和机器学习,各种方便的工具包只需导入或pip安装即可。
但是,当这些方案互不友好时,会发生什么呢?当不同的Python项目需要相同外接程序的竞争版本或不兼容版本时,您该怎么办?这就是Python虚拟环境发挥作用的地方。
您可以在python2和python3中创建和使用虚拟环境,尽管两者实现的工具不同。Virtualenv是python2的首选工具,而venv则在python3中处理这个任务的工具。
1.何为Python虚拟环境
虚拟环境是一种拥有多个并行的Python解释器实例的方法,每个实例都有不同的包集和不同的配置。每个虚拟环境都包含Python解释器的一个独立副本,包括其支持的实用程序的副本。
每个虚拟环境中安装的包只能在该虚拟环境中看到,而不能在其他环境中看到。即使是带有平台依赖二进制文件的大型复杂包,也可以在虚拟环境中相互隔离。
虚拟环境有几个常见的使用场景:
- 正在开发依赖于相同包的不同版本的多个项目,或者由于名称空间冲突而必须与某些包隔离的项目。这是最标准的用例。
- 所处的Python环境中不能修改站点包目录。这可能是因为工作在一个高度受控的环境中,例如托管,或者在服务器上,由于生产需求,解释器(或其中使用的包)的选择不能更改。
- 希望在高度受控的环境下使用特定的包组合进行试验,例如测试交叉兼容性或向后兼容性。
- 希望在没有第三方包的系统上运行Python解释器的“基准”版本,并且只根据需要为每个单独的项目安装第三方包。
没有人说不能简单地将Python库解压缩到项目的子文件夹中并以此方式使用它。同样,您可以下载Python解释器的一个独立副本,将其解压缩到一个文件夹中,并使用它运行专用于它的脚本和包。
但是管理这些拼凑在一起的项目很快就变得困难了。只是一开始看起来更容易。使用具有二进制组件或依赖于复杂的第三方依赖关系的包可能是一场噩梦。最好的长期解决方案是使用Python的原生机制来创建和使用虚拟环境。
2.Python 3中的虚拟环境
Virtualenv已经被证明是无数Python开发人员不可或缺的一部分,但它并不是Python标准库的一部分。Python 3有用于虚拟环境的本机工具,这使得整个过程非常简单。
![9064dfda8ab2c29c774c0c581f749d5c.png](https://i-blog.csdnimg.cn/blog_migrate/83de0aebb135b959cf2a28d6a0c361ec.jpeg)
2.1创建虚拟环境
要在给定目录中创建虚拟环境,在终端命令行中输入:
python3 -m venv /path/to/directory
(注意,如果您的系统识别python为默认的python3解释器,那么您可以使用python而不是python3。)
设置虚拟环境的整个过程可能需要一到两分钟。当它完成时,您应该有一个包含几个子目录的目录。最重要的子目录是Unix上的bin或Windows上的Scripts,在这里您可以找到用于虚拟环境的Python解释器及其实用程序的副本。
请注意,因为每个虚拟环境都包含自己的Python解释器副本,所以它可能相当大。在Windows和Linux上,Python 3.6虚拟环境将消耗大约23 MB的磁盘空间。
2.2激活虚拟环境
在使用这个虚拟环境之前,需要显式地激活它。激活使虚拟环境在会话期间成为默认的Python解释器。
根据所使用的操作系统和命令shell,需要使用不同的语法来激活虚拟环境。这里介绍如下:
- 在 Unix或MacOS上, 使用bash shell: source /path/to/venv/bin/activate
- 在 Unix或MacOS上, 使用csh shell: source /path/to/venv/bin/activate.csh
- 在 Unix或MacOS上, 使用fish shell: source /path/to/venv/bin/activate.fish
- 在Windows上,使用命令提示符(命令行窗口): pathovenvScriptsactivate.bat
- 在Windows 使用PowerShell: pathovenvScriptsActivate.ps1
请注意,激活的环境仅适用于它被激活的上下文。例如,如果您启动了PowerShell的两个实例A和B,并且只激活实例A中的虚拟环境,那么该环境将只应用于A。它不会应用于其他任何地方。
2.3配置和使用虚拟环境
一旦激活了新的虚拟环境,就可以使用pip包管理器为其添加和更改包。在Windows上,pip位于虚拟环境的Scripts子目录中,在Unix操作系统上,pip位于bin子目录中。
如果你已经熟悉了pip的工作方式,就可以了。在虚拟环境中也是一样的。只要确保您使用的是pip实例,它在它被激活的上下文中管理虚拟环境的包——例如 bash会话或Windows CLI/PowerShell会话。如果希望验证是否使用了正确的pip和正确的虚拟环境,则键入pip -V,然后查看它显示的路径是否指向虚拟环境的一个子目录。
要使用您创建的虚拟环境来运行Python脚本,只需在激活Python的上下文中从命令行调用它。
2.4停用虚拟环境
当使用完虚拟环境后,您可以终止正在使用它的会话。如果希望继续在该环境中工作,但使用默认的Python解释器,可以在提示符处键入deactivate。在命令提示符下的Windows用户需要从脚本子目录中运行deactivate.bat,但是Unix用户和运行PowerShell的Windows用户可以在任何目录中简单地输入deactivate.bat。
2.5删除虚拟环境
虚拟环境是自包含的,与项目之外无所关系。当不再需要虚拟环境时,可以删除它的目录。
3.Python 2的虚拟环境
在Python 2中,虚拟环境不是该语言的原生特性。相反,您需要安装第三方库来创建和管理虚拟环境。
这些项目中最流行、最广泛使用的是virtualenv,它负责创建目录结构并将所需的文件复制到虚拟环境中。要安装virtualenv,只需使用pip install virtualenv。要用它创建一个虚拟环境目录,输入virtualenv /path/to/directory 即可。激活和停用虚拟环境的工作方式与Python 3中的虚拟环境相同(见上文)。
4.Jupyter notebook中使用虚拟环境
如果您正在使用Jupyter notebooks(即IPython笔记本),并且已经在系统范围内安装了Jupyter,那么可以创建虚拟环境并激活它。然后,从虚拟环境目录运行pip install ipykernel,为IPython添加所需的组件。最后,运行ipython kernel install —user —name=,其中project_name是希望与特定项目关联的名称。从那里,应该就能够启动Jupyter并切换到安装在虚拟环境中的IPython内核了。
![aa9cc65b832674ebc066c27ee52e3f7a.png](https://i-blog.csdnimg.cn/blog_migrate/215e1722985bd458be9a17c7fbe5af9b.jpeg)
5.小结
本文主要介绍了为了避免Python项目可能的冲突,如何通过虚拟环境来实现。这是初学Python应该都要面对的问题。按照本文所述,你就可以轻松搞定Python的虚拟环境了。