轻松搞定Python虚拟环境

随着项目的复杂度和规模的扩展 , 不同的库/包很容易引起冲突 , 而利用Python 2和Python 3中的虚拟环境来管理Python项目 , 可以有效地处理相关的冲突 。
轻松搞定Python虚拟环境文章插图
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有用于虚拟环境的本机工具 , 这使得整个过程非常简单 。
轻松搞定Python虚拟环境文章插图
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上 , 使用命令提示符(命令行窗口): path\to\venv\Scripts\activate.bat
  • 在Windows 使用PowerShell: path\to\venv\Scripts\Activate.ps1
请注意 , 激活的环境仅适用于它被激活的上下文 。 例如 , 如果您启动了PowerShell的两个实例A和B , 并且只激活实例A中的虚拟环境 , 那么该环境将只应用于A 。 它不会应用于其他任何地方 。
2.3配置和使用虚拟环境一旦激活了新的虚拟环境 , 就可以使用pip包管理器为其添加和更改包 。 在Windows上 , pip位于虚拟环境的Scripts子目录中 , 在Unix操作系统上 , pip位于bin子目录中 。