Press "Enter" to skip to content

混淆的数据科学家的PATH变量:如何管理它

了解什么是PATH以及如何在Windows和类UNIX系统中添加路径

由Midjourney制作的图像

有时候我觉得StackOverflow上的人头上都贴着罗盘,他们总能找到PATH。

我认为它不在你的PATH中。你可能弄乱了你的PATH。你是否将其添加到了你的PATH中?检查可执行文件是否在你的PATH中。

“我是说,PATH到底是什么?”我总是这样说,红着脸,试图解决一个错误。现在,我已经在我的数据科学之旅中超过三年了,我完全知道它是什么了。几乎。

在这篇文章中,我打算教你如何在Windows和类UNIX系统中管理这个令人困惑的环境变量。

让我们开始吧!

命令也有路径

你最常使用的一个终端命令是什么?毫无疑问,我的是git,因为我经常在写文章时进行提交。

我问这个问题是因为大多数终端命令在操作系统中也有自己的路径。要找到该路径,你只需运行which valid_command_name。例如,这是我git实例的路径:

$ which git  # 在Windows上,使用`where`/usr/bin/git

你可能会认出上面是绝对路径。但它是指什么呢?

一个可执行二进制文件!(如果你在Windows上,你会得到一个.exe文件路径)

它包含了当运行git命令时要执行的指令。所有的终端命令都是以某种形式的shell脚本或可执行文件执行特定任务。

例如,你可以尝试在内置终端命令上使用which命令,如clearcattouch,你会得到绝对路径(甚至是which命令本身)。

一旦你得到了可执行文件的路径,你可以尝试使用完整路径运行命令,就像这样:

$ /usr/bin/git status -s  # 和`git status -s`相同M 2023/6_june/7_path/dump.ipynb

它起作用了!但有趣的是,为什么单词git等同于绝对路径/usr/bin/git呢?我是说,git只是一个单词。

你的电脑怎么知道这么多命令的完整可执行路径,只需要一个关键词就可以运行它们呢?

(这就是顿悟时刻!)

使用PATH变量!

瞧,PATH!

PATH是一个变量,它保存了几乎所有终端命令(无论是内置的还是用户安装的)的可执行文件的绝对路径。

当你键入任何命令,如conda env create,操作系统会在你的PATH变量中查找名为conda的可执行文件。如果它找不到可执行文件,它会返回一个command not found错误:

$ unknown_commandunknown_command: command not found

你可以使用一个命令打印你的PATH中的路径。

在类UNIX系统中:

$ echo $PATH/home/bexgboost/.local/bin:/home/bexgboost/anaconda3/bin:...

在Windows中:

$ ECHO %PATH%C:\Python39\Scripts\;C:\Python39\;C:\WINDOWS\system32;...

在PATH中,每个路径用冒号(在Unix中)或分号(在Windows中)分隔。

这些路径使得你不必记住安装在系统中的可执行文件的绝对路径。

在Windows中使用PATH

在Unix类系统和Windows系统中,编辑PATH变量的方法不同。此部分是关于在Windows中管理PATH变量的。

你最常做的操作是将新路径添加到PATH中。例如,要将C:\Users\user\Desktop\articles目录添加到PATH中,你应该以管理员权限打开命令提示符或PowerShell。然后,运行以下命令:

$ setx PATH "%PATH%;C:\Users\user\Desktop\articles"

但是,不要急——如果你不小心,setx命令可能会对你的PATH造成很大的影响。因此,在Windows中安全的做法是通过系统属性窗口添加路径。

以下是逐步说明和一个GIF图像,用于添加一个新路径到PATH:

  1. 点击开始按钮,搜索“编辑系统环境变量”,然后点击第一个结果。
  2. 从弹出窗口中点击“环境变量”。
  3. 决定新路径是否应该添加到当前用户还是整个系统中。
  4. 在“用户变量your_username”或“系统变量”下,向下滚动,找到“Path”变量。
  5. 选中它,然后点击编辑
  6. 在新的弹出窗口中,点击“新建”,并粘贴新路径,例如C:\Users\user\Desktop\articles
  7. 点击三次确定。
GIF by me.

从最终的弹出窗口,你也可以删除或更改路径的顺序(请参见关于顺序重要性的最后一节)。

在Unix中使用PATH

在Unix类系统中,将新路径添加到PATH要简单得多。

例如,要添加路径/home/bexgboost/articles,你必须运行以下命令:

$ export PATH="/home/bexgboost/articles:$PATH"

新路径将添加到PATH的开头。要将其添加到结尾,你必须更改$PATH的位置:

$ export PATH="$PATH:/home/bexgboost/articles"

但是,新路径仅在当前终端会话的持续时间内添加。要将其永久添加到PATH环境变量中,你必须将export命令附加到你的shell配置文件中。

具体的配置文件取决于你使用的shell:

  • 对于Bash:将export命令添加到~/.bashrc~/.bash_profile(你还可以考虑.profile,请参见此处的区别)。
  • 对于Zsh:将export命令添加到~/.zshrc
  • 对于Fish:将export命令添加到~/.config/fish/config.fish

一旦你从列表中选择你自己的文件(我将选择.bash_profile),使用以下echo命令:

$ echo 'export PATH="$PATH:/home/bexgboost/articles"' >> ~/.bash_profile

然后,使用source ~/.bash_profile重新加载配置文件,完成了。

路径的顺序

在PATH变量中的路径顺序决定了执行命令或程序时搜索目录的优先级。

当你在终端中输入一个命令时,操作系统将从左到右逐个检查PATH中的路径来查找其可执行文件。如果多个目录包含同名的可执行文件,则使用第一个目录。

例如,如果您的系统上有多个 Python 版本,则在终端中运行 python 时,将使用您 PATH 中最左边的 Python 可执行文件。

结论

在数据科学和机器学习领域,终端经常被忽视。相反,初学者更倾向于使用像 VSCode 或 JupyterLab 这样更光鲜亮丽的 IDE。

但是总有一天,不可避免地,他们必须在自己的机器上打开陈旧的 Shell。这就是当他们遇到 PATH 的巨大障碍时的情况。

我希望本文能让您摧毁这个障碍。

感谢您的阅读!

喜欢这篇文章和其中奇怪的写作风格吗?想象一下,您可以访问数十篇类似的文章,都是由一个聪明、迷人、风趣的作者(那就是我,顺便说一下:)撰写的。

只需 4.99 美元的会员费,您就可以访问不仅是我的故事,还有来自小猪AI最好、最聪明的人才的知识宝库。如果您使用我的推荐链接,您将获得我的超新星感激之情和虚拟高五,感谢您支持我的工作。

作为小猪AI会员,您会为您阅读的作家支付会员费的一部分,并获得对每个故事的完全访问权限…

ibexorigin.medium.com

Leave a Reply

Your email address will not be published. Required fields are marked *