2

前言

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

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

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

首先说说python命令正常工作的原理,以Windows为例,当我们的Python装好后,可执行程序是一个.exe文件(其他系统中为其他形式的可执行文件)。

直接打开python.exe,就会打开一个输入命令的窗口。

但如果我们使用命令行输入Python,也可以启用Python的命令行,这是什么原理呢?
Pasted image 20220328190539.png

揭晓答案:系统中有一个位置,告诉终端“我知道Python这个程序在哪”。

下面就可以聊一聊环境变量了。

二、环境变量

什么是环境变量?

想象一个场景,如果你第一次上学,中午打算去食堂吃饭,但又不知道食堂在哪。
你可以自己把整个校园都转一遍,最终靠自己的努力找到食堂,然后进去吃饭;
当然也可以直接问老师,老师告诉你“在某个路口左转,步行500米之后到达”。

Pasted image 20220328190751.png

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

用户自己寻找,找到这个资源放在哪里,然后让计算机按照这个路径执行;
在计算机中放一张“地图”,地图中标出了资源的位置,然后计算机只需要看“地图”,就知道某个软件放在哪里。

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

Pasted image 20220328190818.png

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

如果计算机找不到找不到怎么办呢,比如输入Python,计算机找不到和Python有关的任何资源,它就只能提示“既不是内部或外部命令也不是可运行的程序或批处理文件”了...
Pasted image 20220328190837.png

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

当Python安装好之后,就可以选择,把Python这个软件加入环境变量,这样系统就知道Python的家住在C盘的目录下了。

Pasted image 20220328193048.png

但是这样有个小问题在于,

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

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

三、虚拟环境

对于一般情况,Python和pip命令,他们的路径永久的写在安装目录下。
C:/Program Files/Python3.x/Python.exe

Pasted image 20220328191905.png
如果想切换版本,最笨的方法就是,安装多个Python,然后每次手动设置环境变量,但这样效率太低了。

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

Pasted image 20220328193556.png
如果有多个项目,规范的做法是每个项目一个虚拟环境。

Pasted image 20220328193732.png

这样,就可以在不影响全局环境的情况下,对于虚拟环境安装各种第三方包。

一方面,可以给不同的项目使用不同的Python版本,使各个项目互不干扰。

另一方面,如果虚拟环境出现了各种问题,只需要把它删了重新创建一个即可,并不会影响其他项目的环境。

四、总结

  • Windows中,终端输入Python的原理是:执行了Python.exe(其他系统为其他形式的可执行文件)。
  • 之所以不需要用户输入路径,是因为系统知道Python.exe在哪。
  • 计算机查找Python在哪,是通过环境变量
  • 为了解决不同版本和不同包的冲突,出现了虚拟环境
  • 虚拟环境创建了另一组独立的环境,包含Python.exe和pip.exe等文件。
  • 虚拟环境生效的原理是:让Python的环境变量临时的指向另外的Python文件,而不是全局的环境变量。

后记

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


LYX6666
1.6k 声望73 粉丝

一个正在茁壮成长的零基础小白