M2 Mac环境iTerm2中执行Python Makefile提示python命令不存在
M2 Mac下iTerm2执行Python相关Makefile报错:python命令找不到
问题详情
在搭载M2芯片的Mac设备上,使用iTerm2执行Makefile的test-local目标时出现异常:
- Makefile中
test-local目标的命令:
test-local: TREE_SITTER_LIB_PATH=./test python -m pytest
- 执行
make test-local后返回错误:
➜ make test-local /bin/sh: python: command not found make: *** [test-local] Error 127
- 当前Python路径与别名信息:
➜ which -a python python: aliased to /usr/local/bin/python3.9 ➜ python Python 3.9.17 (main, Jun 20 2023, 17:20:08) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin Type "help", "copyright", "credits" or "license" for more information.
- 用户已尝试修改
.zshrc添加路径但无效,.zshrc内容:
alias python=python3 PYTHON="$PATH:/Users/lewis.chi/Library/Python/3.9/bin" PYTHON1="/usr/local/bin/python3.9" PYTHON11="/usr/local/bin/" export PATH=$PATH:$PYTHON:\$PYTHON1:\$PYTHON11
原因分析
- Make默认使用
/bin/sh执行命令,而非当前终端的zsh,zsh中设置的alias python=python3不会被sh识别。 - 用户的
.zshrc中PATH设置存在错误:- 把
$PATH写入了PYTHON变量,导致PATH重复叠加无效路径 - 使用了转义符
\$,导致变量无法正确展开
- 把
解决方法
方法1:直接修改Makefile中的Python命令
直接用python3替代python,或者使用Python的绝对路径:
# 方案A:用python3 test-local: TREE_SITTER_LIB_PATH=./test python3 -m pytest # 方案B:用绝对路径 test-local: TREE_SITTER_LIB_PATH=./test /usr/local/bin/python3.9 -m pytest
方法2:在Makefile中配置Python路径
可以在Makefile开头定义Python变量或设置PATH:
# 方案A:设置PATH,让sh能找到python PATH := /usr/local/bin:$(PATH) test-local: TREE_SITTER_LIB_PATH=./test python -m pytest # 方案B:直接定义PYTHON变量 PYTHON := /usr/local/bin/python3.9 test-local: TREE_SITTER_LIB_PATH=./test $(PYTHON) -m pytest
方法3:修复.zshrc并让Make使用zsh执行
- 先修正
.zshrc的PATH设置:
alias python=python3 export PATH="$PATH:/Users/lewis.chi/Library/Python/3.9/bin:/usr/local/bin"
- 然后让Make使用zsh执行命令,二选一即可:
- 在Makefile开头添加:
SHELL := /bin/zsh - 执行make时临时指定SHELL:
SHELL=/bin/zsh make test-local
- 在Makefile开头添加:
内容的提问来源于stack exchange,提问作者Lewis
相关产品推荐
相关产品推荐

