为何pip在Make命令中无法运行,在命令行却正常?
Makefile中pip别名不生效的解决办法
问题根源
Makefile默认使用/bin/sh(POSIX标准shell)执行命令,而非日常使用的zsh。zshrc里配置的alias pip="pip3"属于zsh的交互式专属配置,不会被非交互式的Makefile执行环境加载,所以别名在Makefile里无法生效。
可行解决方案
1. 直接替换为pip3
最直接的处理方式,修改Makefile中的命令,把pip直接换成pip3:
install-deps: pip3 install -r requirements.txt
2. 让Makefile用zsh加载配置
强制Makefile使用zsh并加载zshrc配置,先在Makefile开头指定shell,再用登录模式执行命令:
SHELL := /usr/bin/zsh install-deps: zsh -lc "pip install -r requirements.txt"
-l参数让zsh以登录shell启动,会自动加载zshrc;-c用于执行后续命令。
3. 在Makefile中临时设置别名
不依赖zshrc,直接在命令里临时定义别名:
install-deps: alias pip=pip3; pip install -r requirements.txt
4. 系统级软链接(一劳永逸)
在系统目录创建pip指向pip3的软链接,这样所有环境下调用pip都会执行pip3:
sudo ln -s $(which pip3) /usr/local/bin/pip
内容的提问来源于stack exchange,提问作者qazplm
相关产品推荐
相关产品推荐

