为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2023-10-11 22:56:26
我有一台装有 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我不知道是什么设置/Library/Frameworks/Python.framework/Versions/3.8/bin:这个目录在我的 Mac 上不存在。我之前安装了 Python,但没有使用 Homebrew,这就是创建该目录的原因。我确实删除了它,但仍然有一些东西可以导出该行$PATH,但我找不到它!有人有猜测吗?我确实尝试过grep -r /*,但对我的笔记本电脑来说,这样的搜索太多了,无法完成。.zshenv我在我的代码中设置了初始化pyenv和conda. 当然,我确实写了PATH="/dir/to/conda/bin:$PATH"同样的内容pyenv(参见下面的代码)。我不明白为什么,但他们最终以$PATH. 有人知道为什么吗?是因为eval "$(pyenv init -)"之前被评价过吗conda?# >>> pyenv initializeexport PYENV_SHELL=$SHELLexport PATH="/Users/luca/.pyenv/bin:$PATH"export PATH="/Users/luca/.pyenv/versions/3.8.5/bin:$PATH" #export Python 3.8 bin directoryif 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"    fifiunset __conda_setup# <<< conda initialize <<<
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

长话短说

$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/


查看完整回答
反对 回复 2023-10-11
?
千万里不及你

TA贡献1784条经验 获得超9个赞

我有完全相同的问题,并且我找不到任何其他来源来解释为什么 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”,因为它会弄乱我的环境位置,该位置位于倒数第二个位置。请检查您自己的路径变量并做出相应的决定。


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


查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信