conda 環境で特定ディレクトリ配下に移動すると自動的に仮想環境をアクティベートする方法

2023.06.11

Biconda のために conda をインストールして利用しています。conda 環境の仮想作業で作業しているとリモート接続の都度仮想環境のアクティベートに手間を感じるようになりました。

Bash で作業効率を良くするために試してみて良かった conda の設定内容を紹介します。

実行環境

OS は Ubuntu 22.04 LTS です。Bash 環境を想定しています。

$ conda -V
conda 23.1.0

base 環境自動アクティベートの停止

conda をインストールするとbase環境が自動的アクティベートされた状態になります。プロンプトの前方に(base)と表示されている状態のことです。

(base) ubuntu@ip-10-0-1-249:

任意作成した仮想環境ではなく誤ってbase環境で conda install することがままよくあります。とくに SSH やセッションマネージャーで再接続した後にです。今後も事故りそうなのでbase環境が自動的にアクティベートするのをやめたくなりました。

設定手順

一度conda deactivateしてから自動アクティベートを停止する設定を入れるだけです。

conda deactivate
conda config --set auto_activate_base false

リモート接続を再接続後はデフォルトの conda 環境であるbaseがアクティベートされません。任意の仮想環境をアクティベート(conda activate hoge)しないと!と気がつけます。

特定ディレクトリ配下で自動アクティベート

任意の仮想環境を都度アクティベート(conda activate hoge)するのが手間に感じました。conda でも direnv 的なことを実現したくなりました。

特定のディレクトリ配下へ移動(cd)したら任意の仮想環境(conda activate hoge)を自動実行を実現していた先人の記事がありました。参考により細かい手順を残しておきます。

設定手順

任意の仮想環境へ切り替え用の任意の名前のディレクトリを作成します。

mkdir ~/bioconda
cd ~/bioconda

仮想環境名はbiocondaと名付けて新規作成後、アクティベートします。既存の仮想環境を利用される場合はアクティベートだけ実行してください。

conda create -n bioconda
conda activate bioconda

アクティベートした仮想環境の設定情報をエクスポートします。設定情報が必要というよりは仮想環境名(今回だとbioconda)をテキストに書き出すにあたり手軽でかつ正確に仮想環境名をテキストへ書き出す方法として採用しています。

conda env export > environment.yaml

.bash_profileに設定を追加します。ファイルがなければ新規作成すれば良いです。

vi ~/.bash_profile

.bash_profile

# Auto activate conda environments
function conda_auto_env() {
  if [ -e "environment.yaml" ]; then
    ENV_NAME=$(head -n 1 environment.yaml | cut -f2 -d ' ')
    # Check if you are already in the environment
    if [[ $CONDA_PREFIX != *$ENV_NAME* ]]; then
      # Try to activate environment
      source activate $ENV_NAME &>/dev/null
    fi
  fi
}

export PROMPT_COMMAND="conda_auto_env;$PROMPT_COMMAND"

編集した.bash_profile内容を反映させます。

source ~/.bash_profile

設定は以上です。

動作確認

一度conda deactivateしてから作成したディレクトリ(~/bioconda)から移動します。

conda deactivate
cd ~

作成したディレクトリへ移動すると自動的に指定した conda 環境がアクティベートされたら成功です。プロンプトの前方に指定した仮想環境名((bioconda))と表示されている状態のことです。

$ cd ~/bioconda
(bioconda) ubuntu@ip-10-0-1-249:~/bioconda$

おわりに

地味な設定ですが手間が減って使いやすくなりました。なったのは良いのですが、、、最終的に fish に乗り換えたほうが作業効率が良かったのでBash を使わないといけない状況に備えて必要だった設定を書き残しました。良き conda ライフを!

参考