You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何指定Python3.7的Conda虚拟环境,终端显示Python3.9?

问题

我创建了一个指定Python 3.7版本的Conda虚拟环境,在Anaconda Navigator的Environments中查看该环境时显示Python 3.7,但在终端激活该环境后,执行python --version命令却输出Python 3.9.9。

相关环境信息

  • 使用基于Rosetta的Mac OS终端,处理器为Intel x86-64
  • Shell为Z-shell(zsh)

终端执行命令

~$conda create -n tf python=3.7
~$conda activate tf
(tf)~$python --version
Python 3.9.9

.zshrc文件内容

PROMPT='%n~$'

#export CFLAGS="-I//opt/anaconda3/lib/python3.9/site-packages/numpy/core/include"

#export PATH="/usr/local/bin:$PATH

#alias python_brew=/usr/local/bin/python3

 
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi


# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

.zprofile文件内容

# sets gcc 11 as default gcc compiler (prevents from Xcode version being used)
# alias gcc='gcc-11'
# alias cc='gcc-11'
# alias g++='g++-11'
# alias c++='c++-11'
alias nanoz='nano ~/.zshrc'
alias zprofile='open ~/.zprofile'
 
export PATH="/usr/local/bin:$PATH"


# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<


# PYENV
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
# End: delete for miniconda3 TensorFlow env to work


# Deactivates conda before running brew. 
# Re-activates conda if it was active upon completion.
brew() {
    local conda_env="$CONDA_DEFAULT_ENV"
    while [ "$CONDA_SHLVL" -gt 0  ]; do
        conda deactivate
    done
    command brew $@
    local brew_status=$?
    [ -n "${conda_env:+x}" ] && conda activate "$conda_env"
    return "$brew_status"
}

#PATH TO MYSQL
#export PATH=/usr/local/mysql/bin:$PATH

原因分析与解决办法

核心原因

你的终端里python命令被pyenv接管了,pyenv设置的全局Python版本是3.9.9,而且pyenv的初始化顺序在conda之前,导致它修改的PATH优先级更高,覆盖了conda虚拟环境的Python路径。

从配置文件能看到:.zshrc和.zprofile都是先初始化pyenv,再初始化conda,pyenv会把自身管理的Python路径放到PATH最前面,所以激活conda环境后,系统还是优先调用pyenv的Python。

解决步骤

1. 调整初始化顺序

把conda的初始化代码移到pyenv初始化之前,确保conda激活环境时能优先修改PATH。

修改.zshrc和.zprofile,将pyenv的代码块移到conda初始化之后:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

# PYENV
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

2. 验证pyenv版本配置

执行以下命令查看pyenv的全局/本地Python版本:

pyenv global
pyenv local

如果全局版本是3.9.9,可在激活conda环境后临时执行pyenv local system,让系统优先使用conda的Python;不建议直接修改全局版本,避免影响其他环境。

3. 重启终端

修改配置文件后,关闭并重新打开终端,激活tf环境后再次执行python --version,应该会显示Python 3.7。

4. 额外检查

如果问题仍存在,执行which python查看当前python命令的路径:

(tf)~$which python

正常应该指向/opt/anaconda3/envs/tf/bin/python,如果显示pyenv路径(比如~/.pyenv/shims/python),说明初始化顺序还是有问题,需要重新检查配置文件。

内容的提问来源于stack exchange,提问作者kate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:10:51