【问题标题】:PATH="/custom/dir:$PATH" prepending instead of appending - Conda vs PyenvPATH="/custom/dir:$PATH" 前置而不是附加 - Conda vs Pyenv
【发布时间】:2020-10-07 08:25:52
【问题描述】:

我有一台装有 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 上不存在。我之前安装了没有 Homebrew 的 Python,即 why the directory was created。我确实删除了它,但是在$PATH 中仍然有导出该行的内容,但我找不到它!有人有猜测吗?我确实尝试过 grep -r /* 它,但这对于我的笔记本电脑来说太难了。

  2. 我在我的.zshenv 中设置了初始化pyenvconda 的代码。当然,我确实写了PATH="/dir/to/conda/bin:$PATH"pyenv 也是如此(参见下面的代码)。我不明白为什么,但它们最终位于$PATHend。有人知道为什么吗?是因为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 <<<

【问题讨论】:

    标签: python anaconda conda zsh pyenv


    【解决方案1】:

    我有完全相同的问题,我找不到任何其他来源来说明为什么 conda 环境会被附加而不是前置。我已将以下代码添加到我的 .bash_profile (在 conda 初始化之后),它翻转了所有路径位置的顺序。这绝对是一种糟糕的做法,但对于遇到同样问题的人来说,这可能是一个快速的解决方案。

    locations=($(echo $PATH | tr ":" "\n"))
    path=""
    
    for (( idx=${#locations[@]}-2 ; idx>=0 ; idx-- )) ; do
        # Skip the last path location since this would put the general /Users/XXX/opt/anaconda3/condabin first
        # To not do this change the -2 to -1
        path="${path}:${locations[$idx]}"
    done
    
    path="${path:1}"
    PATH=$path
    export $PATH
    

    如评论中所述,我没有添加位置“/Users/XXX/opt/anaconda3/condabin”,因为它会弄乱我的环境位置,该位置位于倒数第二个。请检查您自己的路径变量并做出相应决定。

    编辑:如果有人有更好的解决方案,请告诉我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2012-04-23
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多