直接输python报command not found,是因为macos catalina起zsh默认不提供python命令(仅保留python3),path中无对应可执行文件;解决方法是在~/.zshrc中添加alias python=python3并source生效。

为什么直接输 python 会报 command not found
macOS 自 Catalina 起默认用 zsh,且系统不再提供 python 命令(只留 python3),这是苹果刻意为之——避免干扰系统工具链。你输入 python 时,zsh 会在 PATH 里从左到右找可执行文件,但默认路径中没有指向 python3 的软链接或别名。
永久添加 python 别名:只改 ~/.zshrc 就够了
别 alias 临时生效,也别去动系统级配置文件(如 /etc/zshrc),只需在用户级配置中追加一行:
echo "alias python=python3" >> ~/.zshrc-
source ~/.zshrc立即生效 - 验证:
python --version应输出 Python 3.x 版本号
注意:别写成 alias python="/usr/local/bin/python3"——硬编码路径容易失效;用命令名本身更可靠,且能继承 python3 当前的 PATH 查找逻辑。
设置 PYTHONPATH 和扩展 PATH:路径顺序和引号是关键
如果你有自定义模块或本地安装的 Python 工具(比如自己写的 utils/ 包),需要让 import 找得到:
- 先确认你的模块根目录绝对路径,例如
/Users/you/project/libs - 在
~/.zshrc中添加:export PYTHONPATH="/Users/you/project/libs:$PYTHONPATH" - 如果还要让终端直接运行某个脚本(比如
mytool),再加:export PATH="/Users/you/project/bin:$PATH"
⚠️ 容易踩的坑:
- 路径不能带尾部斜杠(
/Users/you/project/libs/❌) - 别用双引号包裹整个
export行(export "PATH=..."❌),shell 会把它当字符串字面量 -
$PATH必须写在右边,否则会覆盖系统原有路径,导致ls、cd失效
配置生效后仍不生效?检查加载时机和冲突项
source ~/.zshrc 只影响当前终端会话;新开终端才真正检验“永久性”。但更常被忽略的是:
-
~/.zprofile里可能已有重复的export PATH=...,优先级高于~/.zshrc,造成覆盖 -
pyenv或conda初始化脚本如果也修改了PATH,它们的位置必须在你自定义的export之后,否则你的路径会被压到末尾甚至丢弃 - 用
echo $PATH和echo $PYTHONPATH直接看结果,比猜更准
复杂点在于:zsh 启动时先读 ~/.zprofile(登录 shell),再读 ~/.zshrc(交互式非登录 shell)。如果你用的是 iTerm2 或 VS Code 终端,默认开的就是非登录 shell,所以只认 ~/.zshrc ——这点不确认清楚,改错文件就白忙活。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











