例如使用brew安装了python3.10之后,使用python3命令得到的版本却是3.9.6的版本:


macOS 预装的 /usr/bin/python3
通常是较旧的 Python 3.x 版本(例如 Python 3.8 或 3.9),因为苹果倾向于使用稳定的系统版本,而非最新版。
这是出于系统兼容性和稳定性考虑,不建议直接修改或删除系统自带的 Python。
查看python3的路径,可以知道是在/usr/bin下面。其实还有一个路径是/usr/local/bin,通过echo $PATH查看环境变量,可以看到/usr/local/bin在前,因此优先级高。

因此可以在/usr/local/bin中创建一个python的虚拟环境,使用sudo su切换为root用户,使用python3.10 -m venv venv命令:

最后修改~/.bash_profile文件,将venv的目录添加到PATH前面:

重新开启命令行窗口,验证python命令即可。
拓展
在 Linux/macOS 系统中,/usr/local/bin
和 /usr/bin
都是存放可执行程序的目录,但它们的用途、管理方式和优先级有显著区别。以下是详细对比:
1. 设计目的
目录 | 用途 | 适用场景 |
---|---|---|
/usr/bin | 存放系统预装的核心命令和软件包管理器(如 apt 、yum )安装的软件。 | 系统级工具(如 ls 、grep 、python3 )。 |
/usr/local/bin | 存放用户或管理员手动编译安装的软件,或第三方工具(如 Homebrew)。 | 用户自定义软件(如手动安装的 node 、pip 或编译的 nginx )。 |
2. 文件来源与管理
目录 | 管理方式 | 修改权限 |
---|---|---|
/usr/bin | 由系统包管理器自动管理(如 apt 、dnf )。 | 普通用户无写入权限,需 sudo 修改。 |
/usr/local/bin | 由用户或管理员手动管理,或通过工具(如 Homebrew)管理。 | 通常对管理员可写,允许用户级安装。 |
3. 路径优先级
- 默认
PATH
顺序(通过echo $PATH
查看):
/usr/local/bin:/usr/bin:/bin:...
usr/local/bin
优先级高于/usr/bin
。- 若两个目录有同名命令(如
python3
),系统会优先执行/usr/local/bin
下的版本。
4. 系统更新影响
目录 | 更新行为 | 风险 |
---|---|---|
/usr/bin | 随系统升级或包管理器更新而变动。 | 可能覆盖旧版本,但保证系统一致性。 |
/usr/local/bin | 不受系统包管理器影响,需手动更新。 | 版本更灵活,但需自行维护。 |
5. 典型示例
场景 1:Python 版本冲突
which python3
# 输出可能是 /usr/local/bin/python3(用户安装的新版)
# 或 /usr/bin/python3(系统自带的旧版)
场景 2:Homebrew 软件
Homebrew 默认将软件安装到 /usr/local/bin
(macOS)或 /opt/homebrew/bin
(M1 Mac),以避免干扰系统工具:
brew install node # 安装到 /usr/local/bin/node
6. 如何选择?
- 需要自定义软件或最新版本 → 安装到
/usr/local/bin
。 - 依赖系统稳定性 → 使用
/usr/bin
中的官方版本。 - 安全建议:
- 避免手动修改
/usr/bin
下的文件。 - 用户级工具尽量通过
~/bin
或/usr/local/bin
安装。
常见问题
Q1: 为什么 pip install
的包在 /usr/local/bin
?
pip
默认将用户安装的脚本(如black
、flake8
)放入/usr/local/bin
,与系统 Python 包隔离。
Q2: 如何强制使用 /usr/bin
下的命令?
- 指定完整路径:
/usr/bin/python3 --version
- 或临时调整
PATH
:
export PATH="/usr/bin:$PATH"
Q3: macOS 和 Linux 的区别?
- macOS 的
/usr/bin
受 SIP(系统完整性保护)限制,部分工具(如git
)默认在/usr/local/bin
提供更新版本。
总结
对比项 | /usr/bin | /usr/local/bin |
---|---|---|
权限 | 系统保护,需 sudo | 用户/管理员可写 |
优先级 | 较低(PATH 中靠后) | 较高(PATH 中靠前) |
适用场景 | 系统核心工具 | 用户自定义或第三方软件 |
更新方式 | 系统包管理器 | 手动或工具(如 Homebrew) |
理解两者的区别能有效避免软件冲突,并合理管理系统环境。