一套「通用 + 可维护」的 macOS 环境变量配置方案,涵盖 JDK 与 Python(含虚拟环境)。
整套做法基于 zsh (macOS 10.15 以后默认 Shell),如果你还在用 bash,把 .zshrc
替换为 .bash_profile
即可。
一、创建系统变量文件
1、创建1个专门放环境变量的文件
以后所有 PATH、JAVA_HOME、PYTHON_HOME 都写这里,避免 .zshrc
里东拼西凑。
#创建shell目录
mkdir -p ~/.config/shell
#在shell下创建env.sh文件
touch ~/.config/shell/env.sh
2. 在 ~/.zshrc
里引入上面的文件
只需加一行,以后改环境变量不需要去碰 .zshrc
:
echo '[ -f ~/.config/shell/env.sh ] && source ~/.config/shell/env.sh' >> ~/.zshrc
上面的意思其实就是「把这一行字写进 .zshrc
文件末尾」。
有2种常见做法,你挑一个最顺手的即可。
方法 A:一句命令(复制-粘贴即可)
打开「终端」,直接执行:
echo '[ -f ~/.config/shell/env.sh ] && source ~/.config/shell/env.sh' >> ~/.zshrc
解释:
-
echo ... >> ~/.zshrc
会把引号里的内容追加到文件末尾,不会覆盖原有内容。 -
执行完没有任何输出就是成功。
方法 B:用文本编辑器手动加
-
在终端输入
open -e ~/.zshrc
(会弹出 TextEdit)。 -
把下面这一行粘到文件最后(单独一行):
[ -f ~/.config/shell/env.sh ] && source ~/.config/shell/env.sh
-
保存并关闭。
3、最后让改动立即生效
source ~/.zshrc
完成!
PS:删除文件
1、想删除 ~/.config/shell/env.sh这个文件
直接终端里执行:
rm ~/.config/shell/env.sh
2、如果你想连目录一起删掉(里面没别的文件):
rmdir ~/.config/shell
二、配置 Python(系统 + Homebrew + pyenv)
1 系统自带 /usr/bin/python3不动
保持不动,留给 macOS 自用。
2 安装 pyenv 用于管理多版本
在终端里执行:
brew install pyenv
3 让终端每次启动都加载 pyenv
在 ~/.config/shell/env.sh
配置python变量
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
可用如下方式操作上面:
方法 1:一句命令(推荐)
打开终端,直接复制粘贴执行:
cat >> ~/.config/shell/env.sh <<'EOF'
# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
EOF
方法 2:终端打开文件,进行文本粘贴
open -e ~/.config/shell/env.sh
手动粘贴后保存即可。
4 安装具体python版本示例:
pyenv install 3.11.9 3.12.3 (一次安装2个版本)
pyenv global 3.12.3 # 设置为全局默认
5 虚拟环境(可选但强烈建议)
1、安装 pyenv-virtualenv
插件
brew install pyenv-virtualenv
装完后重新加载一次 shell (新开标签页 或 执行 source ~/.zshrc
)
2、验证
pyenv virtualenv --help # 不再报错,能看到帮助
3、创建虚拟环境
#创建虚拟环境
pyenv virtualenv 3.12.3 proj312(虚拟环境名称)
#激活虚拟环境
pyenv activate proj312
6 让配置立即生效(一定要执行,全局变量才生效)
source ~/.zshrc
7 验证
java -version
python --version
which java
which python
python --version # 应该显示 Python 3.12.3
which python # 应该显示 ~/.pyenv/shims/python
8 全部完成!以后想再装别的版本,只要:
pyenv install 3.10.14
pyenv global 3.10.14 # 切换全局默认
三、关于pyenv管理python版本
1、pyenv 提供了 3 个层级,按优先级从高到低:
-
pyenv shell -- 只对「当前终端会话」生效,关掉窗口就失效
-
pyenv local -- 只对「当前目录及子目录」生效,写在该目录下的
.python-version
文件里 -
pyenv global -- 系统全局默认,其他两级都没设置时才会用它
2、最常用的两种做法
场景 | 命令示例 | 影响范围 |
---|---|---|
全局默认 | pyenv global 3.11.9 |
整台电脑(除非被下面两级覆盖) |
项目单独指定 | 在项目目录里执行 pyenv local 3.10.14 |
仅该项目目录 |
3、快速切换示例
-
先确认已安装目标版本
pyenv versions # 列出现有版本
-
临时在当前终端试试
pyenv shell 3.9.19 python --version # 显示 3.9.19
关掉终端后自动回到 global 的版本。
-
给某个项目单独指
#打开项目 cd ~/myproject #指定该项目的python版本 pyenv local 3.8.18
以后只要
cd ~/myproject
,就会自动切到 3.8.18;离开目录就恢复。
一句话总结
-
想「整台电脑」都用某个版本 →
pyenv global 版本号
-
想「单个项目」用另一个版本 → 在项目目录里
pyenv local 版本号
4、如何让某一个项目指定python版本
在项目目录里执行一次 pyenv local <版本号>
,就会在该目录下自动生成 .python-version
文件,之后每次 cd
进来都会自动切到指定版本。
进入你的项目目录
cd ~/myproject # 换成你自己的目录
2️⃣ 指定本地版本
假设要用 3.11.9 (前提:已 pyenv install 3.11.9
):
pyenv local 3.11.9
执行后两件事立即发生:
-
当前终端立即切到 3.11.9
-
目录里多一个 .python-version 文件,内容就是
3.11.9
3️⃣ 验证
python --version # 应输出 3.11.9
pyenv version # 显示当前生效版本及来源
4️⃣ 以后怎么改
-
想换版本:再执行一次
pyenv local 3.10.14
( .python-version文件会被覆盖)。 -
想取消:删掉
.python-version
文件即可,或直接pyenv local --unset
。
5️⃣ 让 Git 忽略(可选)
-
如果不想让
.python-version
进仓库,在项目.gitignore
里加一行:.python-version
就这么简单。
多项目间切换python版本
想在多个项目间切换Python版本,给 每个项目单独设一次 pyenv local,
然后你就只需要 cd 进目录,Python 版本会自动切,无需手动再敲命令。

四、配置 JDK(多版本并存,一键切换)
1、用 Homebrew 安装主流 JDK(举例:Temurin 17 & 21)
**先装两个 JDK,**把 17 和 21 都装进 Mac,命令就是
brew install temurin17 temurin21

Homebrew 会把 JDK 装到 /Library/Java/JavaVirtualMachines/temurin-XX.jdk/Contents/Home
。
2、在环境变量文件,创建切换jdk的函数
我们在 ~/.config/shell/env.sh
里放一段只有 10 行的函数,名字叫 jdk_switch
# 列出所有已装 JDK
jdk_switch() {
local ver=$1
case $ver in
17) export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home ;;
21) export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home ;;
*) echo "Usage: jdk 17|21"; return 1 ;;
esac
export PATH="$JAVA_HOME/bin:$PATH"
java -version
}
# 默认启用 21
jdk_switch 21
说明:
函数做的事就是:
把 JAVA_HOME 设成对应版本的路径
把 $JAVA_HOME/bin 放到 PATH 最前面
并且立刻执行 java -version 让你确认jdk当前版本
以后在终端里直接敲:
jdk_switch 17 # 立刻把 JAVA_HOME 指到 17
jdk_switch 21 # 立刻把 JAVA_HOME 指到 21
以后想切版本,终端里敲:jdk_switch 17
即可