macOS中,在不同路径下安装了多个相同的软件,那么执行某个命令时的优先级是什么呢?
以常见的python为例,macOS自带了python3.9,用户在官网下载了python3.11.pkg安装包并完成安装,接着用brew等流行工具安装了最新版的python3.12,那么在macBook的磁盘里现在有三份python3可执行代码。
当在命令行中执行python3 --version,结果是3.9?还是3.11?抑或是3.12?
当未调整系统环境变量时,答案是3.12。
要想知道系统以何种方式加载软件,就应该找到它的环境变量,查看系统认定的目录优先级是如何排序的。macOS中,系统根目录(地址为/)下的/etc/paths中有对应的优先级排序:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
那这些优先级对应哪些安装方式呢?请看第二节:
系统自带应用安装于/usr/bin/目录下,可以看到,在上述排序中,位列第二。
用户手动安装应用,多位于/usr/local/bin/目录下, 位列第一。因此当系统自带3.9版本的Python时,手动安装3.11版本,执行python3 --version命令,按照环境变量中目录顺序,结果应为3.11,事实也确实如此。
Homebrew中的brew命令非常方便版本维护和管理,以Homebrew4.2.3版本为例,通过brew install python3安装的软件位于/opt/homebrew/Cellar/python3,同时brew会创建符号链接到/usr/local/bin目录下,虽然实际安装位置排名第n,但通过链接的骚操作,排名瞬间变成了第一,而且会比第一的排名更靠前一点。此时执行python3 --version命令,结果不出意外地显示为3.12。
Python3.11,会在开始菜单冒出两个快捷方式,很不美观git node python docker等等,这种并不需要界面交互的软件环境,非常适合用brew安装brew安装省时省力省心: