【问题标题】:How to combine a function of alias with conda initialize in .bashrc如何在 .bashrc 中将别名功能与 conda 初始化相结合
【发布时间】:2019-08-18 07:05:23
【问题描述】:

我需要在 .bashrc 中组合两个不同的部分 我的目的是在尝试初始化 conda 之前将 PYTHONPATH 初始化为空。

.bashrc 中有 conda 初始化部分。

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

但是,我在使用默认 PYTHONPATH 时遇到了问题,因为除非我想使用 conda,否则我无法触及这个默认值。所以,我创建了 conda() 别名。但它与使用 conda 初始化部分发生冲突。

错误信息如下所示。

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

这意味着未执行 conda 初始化。

这里是 conda()。

state=true
conda() {
  if $state; then
    state=false
    PYTHONPATH=''
    command conda "$@"
  else
    command conda "$@"
  fi
}

.basrh 的行为应该类似于我尝试在命令行上使用 conda 语句,仅在 conda 初始化工作之前第一次清除 PYTHONPATH。如果我不尝试使用 conda 语句,PYTHONPATH 应该是不可触及的。

【问题讨论】:

  • conda 已经是一个 bash 函数(检查 declare -f conda),所以你正在重写它,因此当你的新函数尝试调用它时它没有定义。
  • @merv 但是,在声明 __conda_setup 之后,回显 $?显示 127 状态。如果我没有将 PYTHONPATH 设为空值,则 conda activate 将不起作用。或者,如果我得到 True 或 False 语句 conda 是否在执行的命令中,我可以解决这个问题。
  • @merv 我需要修复上面的评论。回声$?在终端开头显示 0 状态。

标签: bash function anaconda alias conda


【解决方案1】:

我不确定我是否了解正在发生的事情或您正在尝试做的事情,但这是您可以尝试的:

savePYTHONPATH=PYTHONPATH
PYTHONPATH=''

# the conda initialize section should go here

PYTHONPATH=$savePYTHONPATH

然后你就可以使用你的conda函数了。

如果这不起作用,那么它仍然应该为您提供一些关于如何继续的想法。

请注意,一旦您的 conda 函数运行,即使在 statefalse 之后,PYTHONPATH 仍将保持为空,除非有其他东西将其设置为非空值。所以我不太确定条件的目的是什么。

【讨论】:

  • PYTHONPATH 的声明位于 .bashrc 的末尾。所以,我把你的整个逻辑移到了声明行下面。不幸的是,它不起作用。可能 savePYTHONPATH=$PYTHONPATH 在您的方案中是正确的。
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 2012-10-11
  • 2020-01-22
  • 2012-12-31
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多