乐趣区

关于python:简述Python虚拟环境图解

前言

对于初学者来说,会呈现一些环境问题,对于虚拟环境和为什么应用虚拟环境不是很了解,本文的目标在于解决这些问题。

相干链接:
Python 装置第三方库提醒“既不是外部或外部命令也不是可运行的程序或批处理文件”解决办法

一、python 和 pip 命令是如何工作的

首先说说 python 命令失常工作的原理,以 Windows 为例,当咱们的 Python 装好后,可执行程序是一个.exe 文件(其余零碎中为其余模式的可执行文件)。

间接关上 python.exe,就会关上一个输出命令的窗口。

但如果咱们应用命令行输出 Python,也能够启用 Python 的命令行,这是什么原理呢?

揭晓答案:零碎中有一个地位,通知终端“我晓得 Python 这个程序在哪”。

上面就能够聊一聊 环境变量 了。

二、环境变量

什么是环境变量?

设想一个场景,如果你第一次上学,中午打算去食堂吃饭,但又不晓得食堂在哪。
你能够本人把整个校园都转一遍,最终靠本人的致力找到食堂,而后进去吃饭;
当然也能够间接问老师,老师通知你“在某个路口左转,步行 500 米之后达到”。

事实上,计算机也是须要靠“问路”的形式来寻找资源的,所以就存在两种状况:

用户本人寻找,找到这个资源放在哪里,而后让计算机依照这个门路执行;
在计算机中放一张“地图”,地图中标出了资源的地位,而后计算机只须要看“地图”,就晓得某个软件放在哪里。

这张 “地图”,就是 环境变量

理论运行过程中,如果不指定资源的目录,计算机只会在 当前目录 寻找(System32),如果找不到,就去 环境变量 中寻找。

如果计算机找不到找不到怎么办呢,比方输出 Python,计算机找不到和 Python 无关的任何资源,它就只能提醒 “既不是外部或外部命令也不是可运行的程序或批处理文件” 了 …

环境变量的实质是键值对:也就是 变量名 = 门路。

当 Python 装置好之后,就能够抉择,把 Python 这个软件 退出环境变量,这样零碎就晓得 Python 的家住在 C 盘的目录下了。

然而这样有个小问题在于,

如果不同的我的项目须要 不同的 Python 版本 怎么办?
如果不同的我的项目须要的 第三方包互相冲突 怎么办?

这样就诞生了一个叫做“虚拟环境”的性能。

三、虚拟环境

对于个别状况,Python 和 pip 命令,他们的门路永恒的写在 装置目录 下。
C:/Program Files/Python3.x/Python.exe


如果想切换版本,最笨的办法就是,装置多个 Python,而后每次手动设置环境变量,但这样效率太低了。

虚拟环境的作用在于:在全局的环境变量之外,额定 生成一组 Python 文件,并且在这个我的项目中,把环境变量 长期 的指向这组门路,而不再是 全局门路 了。
例如:D:/project/venv/python3.x/python.exe
(venv 是 Python 原生的虚拟环境的目录)


如果有多个我的项目,标准的做法是每个我的项目一个虚拟环境。

这样,就能够在 不影响全局环境 的状况下,对于虚拟环境装置各种第三方包。

一方面,能够给不同的我的项目应用不同的 Python 版本,使各个我的项目互不烦扰。

另一方面,如果虚拟环境呈现了各种问题,只须要把它删了从新创立一个即可,并不会影响其余我的项目的环境。

四、总结

  • Windows 中,终端输出 Python 的原理是:执行了 Python.exe(其余零碎为其余模式的 可执行文件)。
  • 之所以不须要用户输出门路,是因为零碎晓得 Python.exe 在哪。
  • 计算机查找 Python 在哪,是通过 环境变量
  • 为了解决不同版本和不同包的抵触,呈现了 虚拟环境
  • 虚拟环境创立了另一组独立的环境,蕴含 Python.exe 和 pip.exe 等文件。
  • 虚拟环境失效的原理是:让 Python 的环境变量 长期的指向 另外的 Python 文件,而不是全局的环境变量。

后记

对于接触过前端的同学来说,虚拟环境的性能和 NVM 一样,NVM 也是用来治理多版本 Node.js 共存问题的管理器。

退出移动版