PATH="/custom/dir:$PATH" 前置而不是附加 - Conda 与 Pyenv

我有一台装有 Pyenv 和 Anaconda 的 Mac(最新软件更新)。我使用 Homebrew 管理包并安装了 Python 3。当echo $PATH我得到以下信息时:


/Library/Frameworks/Python.framework/Versions/3.8/bin:

\ /usr/local/bin:

\ /usr/bin:

\ /bin:

\ /usr/local/sbin:

\ /usr/sbin:

\ /sbin:

\ /Library/TeX/texbin:

\ /Users/luca/.pyenv/versions/anaconda3-2020.02/condabin:

\ /Users/luca/.pyenv/versions/3.8.5/bin:

\ /Users/luca/.pyenv/bin

  1. 我不知道是什么设置/Library/Frameworks/Python.framework/Versions/3.8/bin:这个目录在我的 Mac 上不存在。我之前安装了 Python,但没有使用 Homebrew,这就是创建该目录的原因。我确实删除了它,但仍然有一些东西可以导出该行$PATH,但我找不到它!有人有猜测吗?我确实尝试过grep -r /*,但对我的笔记本电脑来说,这样的搜索太多了,无法完成。

  2. .zshenv我在我的代码中设置了初始化pyenvconda. 当然,我确实写了PATH="/dir/to/conda/bin:$PATH"同样的内容pyenv(参见下面的代码)。我不明白为什么,但他们最终$PATH. 有人知道为什么吗?是因为eval "$(pyenv init -)"之前被评价过吗conda

# >>> pyenv initialize

export PYENV_SHELL=$SHELL

export PATH="/Users/luca/.pyenv/bin:$PATH"

export PATH="/Users/luca/.pyenv/versions/3.8.5/bin:$PATH" #export Python 3.8 bin directory

if command -v pyenv 1>/dev/null 2>&1; then

    eval "$(pyenv init -)"

fi

# <<< pyenv initialize <<<


# >>> conda initialize >>>

# !! Contents within this block are managed by 'conda init' !!

__conda_setup="$('/Users/luca/.pyenv/versions/anaconda3-2020.02/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"

if [ $? -eq 0 ]; then

    eval "$__conda_setup"

else

    if [ -f "/Users/luca/.pyenv/versions/anaconda3-2020.02/etc/profile.d/conda.sh" ]; then

        . "/Users/luca/.pyenv/versions/anaconda3-2020.02/etc/profile.d/conda.sh"

    else

        export PATH="/Users/luca/.pyenv/versions/anaconda3-2020.02/bin:$PATH"

    fi

fi

unset __conda_setup

# <<< conda initialize <<<


九州编程
浏览 119回答 2
2回答

慕标琳琳

长话短说$PATH在 macOS 中,如果您将任何在 macOS 上修改的代码放入内.zshenv,它将被覆盖。您应该将其放入.zshrc或其他地方,然后由您的.zshrc.完整解释当获取 zsh 时,文件按以下顺序读取:etc/zshenv/-> $ZDOTDIR/.zshenv/-> etc/zprofile/-> $ZDOTDIR/.zprofile/-> etc/zshrc/-> $ZDOTDIR/.zshrc/-> etc/zlogin/->$ZDOTDIR/.zlogin/在 macOS 中/etc/zprofile,源脚本根据这些文件的内容覆盖 $PATH:/etc/paths /etc/paths.d /etc/manpaths /etc/manpaths.d因此,您不应该将任何更改的行放入$PATH您的 中$ZDOTDIR/.zshenv,而是放入此后的任何文件中(例如$ZDOTDIR/.zshrc)。不要编辑中的文件/etc/!

千万里不及你

我有完全相同的问题,并且我找不到任何其他来源来解释为什么 conda 环境被附加而不是前置。我已将以下代码添加到我的 .bash_profile (在 conda 初始化之后),这会翻转所有路径位置的顺序。这绝对是一个糟糕的做法,但对于遇到同样问题的人来说,这可能是一个快速解决方案。locations=($(echo $PATH | tr ":" "\n"))path=""for (( idx=${#locations[@]}-2 ; idx>=0 ; idx-- )) ; do&nbsp; &nbsp; # Skip the last path location since this would put the general /Users/XXX/opt/anaconda3/condabin first&nbsp; &nbsp; # To not do this change the -2 to -1&nbsp; &nbsp; path="${path}:${locations[$idx]}"donepath="${path:1}"PATH=$pathexport $PATH正如评论中所述,我不会添加位置“/Users/XXX/opt/anaconda3/condabin”,因为它会弄乱我的环境位置,该位置位于倒数第二个位置。请检查您自己的路径变量并做出相应的决定。编辑:如果有人有更好的解决方案,请告诉我!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python