Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍

◎知识点

  1. 虚拟环境的概述

  2. 虚拟环境管理工具

  3. 确定当前Python解释器对应的Python安装目录


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 的环境。

比如在同一个Python环境下运行三个项目,这三个项目都用到了pymysql三方库,但是需要的版本都不一样,运行项目就得下载指定版本的pymysql,运行另一个项目时就得把之前的版本卸载再安装新的适配版本,这还只是一个三方库,如果涉及到多个不同版本的三方库,管理和维护就很麻烦,也容易出错。还有一种情况就是在同一个环境下同时运行这三个项目,管理就更复杂了。

Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍

Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍

这时,Python虚拟环境应运而生:根据Python的安装目录虚拟出三个独立的、虚拟的Python运行环境,简称虚拟环境。每个虚拟环境都有一个独立的Python解释器,都有一套独立的Python标准库、独立的工具和独立的第三方库。三个虚拟环境分别对应三个项目,每个项目所使用的所有第三方库都安装在各自的虚拟环境中。Python的安装目录和各个虚拟环境之间相互独立,互不影响,从而有效解决了第三方库版本冲突的问题

Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍

总结来说,虚拟环境主要有如下作用:

1. 解决第三方库的版本冲突、管理混乱的问题

2.开方环境相互独立,便于部署、升级、维护等

Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍



2.虚拟环境管理工具

常见的虚拟环境管理工具如下:

  • venv : Python 标准库中的虚拟环境管理工具

  • conda : Anaconda 下的管理工具

  • Virtualenv : 第三方的虚拟环境管理工具,在 Pypa 中维护

  • Pipenv : 第三方的虚拟环境管理工具,在 Pypa 中维护

  • poetry : 第三方的虚拟环境管理工具

→ 详见:Python 项目工程化开发指南



3.学习虚拟环境预备知识

当我们在电脑上安装了多个版本的Python时,就会存在多个Python的安装目录,如何确定当前Python解释器对应的Python安装目录呢?首先我们可以使用pyenv这个python版本管理工具来安装管理多个python版本 → MacOS 下利用 pyenv 管理Python 版本和虚拟环境使用 pyenv 管理多个 Python 版本依赖环境

以我的Mac电脑Python环境为例,上边安装了python2.7、python3.7和anaconda3环境。对应python3对应的解释器完整路径是where python3的执行结果的第一行,对应的Python3安装目录是完整路径中/bin/python3前面的部分,也可以用which python3来查看。

Python虚拟环境(1)—虚拟环境概述及常见管理工具介绍

→ ~  where python3
python3: aliased to /usr/local/Cellar/python/3.7.3/bin/python3
/Users/anzhihe/opt/anaconda3/bin/python3
/usr/bin/python3
→ ~  which python3
python3: aliased to /usr/local/Cellar/python/3.7.3/bin/python3
→ ~  python3
Python 3.7.3 (default, Mar 27 2019, 09:23:32)
[Clang 9.0.0 (clang-900.0.39.2)] on darwin

→ ~  where python2
python2: aliased to /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
/usr/local/bin/python2
→ ~  which python2
python2: aliased to /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
→ ~  python2.7
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 19 2020, 20:48:48)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin

→ ~  where python
/Users/anzhihe/opt/anaconda3/bin/python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
/usr/local/bin/python
→ ~  which python
/Users/anzhihe/opt/anaconda3/bin/python
→ ~  python
Python 3.9.7 (default, Sep 16 2021, 08:50:36)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin


参考:

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5666.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注