简单讲一下路径

给大一新生讲路径,其实是为了环境变量这个概念,很多新生朋友一开始接触的时候容易懵。一直想找一个比较通俗的方式把它讲明白。

其实说白了,环境变量就相当于一个登记簿。

环境变量是个啥:去美食街看看

你去一条美食街,或者一个大商场,一般都会有个路牌儿,上面指着每家店铺在几楼、哪个位置。你照着这个牌子找到你想去的那家店,就完了。

环境变量也是这么回事儿。它是一系列的目录路径,登记在系统里。系统要找一个程序、找一个文件的时候,先去这个登记簿上翻一翻,看看在不在上面写着。在的话,直接就定位过去了;不在的话,可能就找不着,甚至直接就给你忽略了。

环境变量可以有好多个,不同的变量记着不同的东西,但其中最重要的一个叫 PATH。

PATH 是怎么回事儿:王小二的故事

这么说吧,假设我们班有一个叫王小二的同学。

隔壁一班也有一个叫王小二的,甚至这三四个班每个班都有一个王小二。但是跑到篮球队上登记的,记录在篮球队队员名单里面的,是我们班这个王小二。

那篮球队的教练,他一说"找王小二来",找的肯定是我们班这个。因为他的登记簿上写的,就是我们班这个王小二。

PATH 也是一样的道理。它就是一个目录名单。如果你的某一个目录被登记到了 PATH 这个环境变量里面,那么这个目录底下的二进制文件也好、快捷方式也好,系统就能直接找着,优先用它。没登记到 PATH 里的那些目录,系统就很难找到,甚至完全忽略掉。

编译器在哪儿

除了 PATH,还有一个跟开发关系很大的,就是编译器所在的路径。

你比如你要用不同的编译器,有时候装了好几个版本,系统得知道这个编译器到底在哪儿。这时候可以用 wherelocatewhereiswhich 这些命令来尝试着找。当然,不同的终端、不同的操作系统,支持的命令也不太一样,这个得看自己用的是啥。

解释器的路径:Python 版本管理

再一个就是解释器的路径。拿 Python 来说,有的同学是直接安装的,也有的同学是用 miniconda 或者 conda 来安装,通过 conda 可以装多个不同版本的 Python。还有些同学习惯单独在某个项目底下新建一个对应的虚拟环境,各用各的。

这些办法都行,大家各取所需,找一个自己比较习惯的就好。

我个人的建议是用 miniconda,可以轻量级地方便地管理多个版本的 Python,甚至同一个版本的 Python 也可以创建好几个不同副本,互相不干扰。这么一来,就能避免不同库之间的版本冲突。

举个例子:你做 PDF 文本提取的工具,比如 marker、markitdown 这些,它可能要求 numpy 的版本比较高。而另一个工具,比如一个做地质投图的,它可能就要求 numpy 1.64。这两个版本有冲突,你装在一个环境里就会打架。这时候用 conda 各开一个环境,各用各的解释器,各装各的 numpy,啥事儿都没有。

当前工作路径:你得知道自己在哪儿

你到一个商厦去买东西的时候,光知道其他饭店在几楼几号还不够,你还得知道你自己现在在哪儿吧?我现在所在的楼层,就是当前所在的目录路径。

得先确定了自己在哪儿,再确定目标在哪儿,你才能找到一条路走过去。路径定了,方向就定了。

从我这儿出发,往前走两步,然后右转就能到那。这个路径就叫相对路径,就是相对于我当前的一个参考点,找到对应的目标的位置。

从这条大路开始,一直走800米,然后标号为358号,这个叫绝对路径,就是你就在这儿找,绝对在这358号店铺。

目标文件在哪儿

最后还有一个:你要用的目标代码文件或者资源文件所在的路径。它不一定就是你当前所在的工作路径。

你别觉得,"我打开终端了,那我要用的文件就在这儿呗"——那可不一定。这俩不是一个概念。有时候你 Python 脚本要读一个 CSV,你得把那个 CSV 的路径写对,不然脚本找不到,就报错了。

如果你只是自己用你这个绝对路径能确定,你就可以用绝对路径,这没问题。但如果你要把这东西分享给别人,有可能人家要放到别的地方,就要考虑是不是要用相对路径,不要把路径写得固定了。

说来说去,就是几个地址嘛

串一下,一共就这么几个路径:

  • 系统的环境变量路径(PATH 那些登记在册的目录)
  • 编译器的路径(你要用的那个编译器装在哪了)
  • 解释器的路径(Python 装在哪个环境里、是哪个版本)
  • 当前工作路径(你现在站在商厦的哪一层)
  • 目标文件所在路径(你要找的那家店在哪儿)

看着挺复杂,其实就是个登记的地址本。理解了这一点,碰上路径相关的问题,静下来想想,找到目标位置,肯定能琢磨明白。