◎知识点
虚拟环境的概述
虚拟环境管理工具
确定当前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虚拟环境应运而生:根据Python的安装目录虚拟出三个独立的、虚拟的Python运行环境,简称虚拟环境。每个虚拟环境都有一个独立的Python解释器,都有一套独立的Python标准库、独立的工具和独立的第三方库。三个虚拟环境分别对应三个项目,每个项目所使用的所有第三方库都安装在各自的虚拟环境中。Python的安装目录和各个虚拟环境之间相互独立,互不影响,从而有效解决了第三方库版本冲突的问题。
总结来说,虚拟环境主要有如下作用:
1. 解决第三方库的版本冲突、管理混乱的问题
2.开方环境相互独立,便于部署、升级、维护等
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来查看。
→ ~ 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
参考: