前言
对于初学者来说,会呈现一些环境问题,对于虚拟环境和为什么应用虚拟环境不是很了解,本文的目标在于解决这些问题。
相干链接:
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共存问题的管理器。