tmuxとanacondaを私は使っているのですが,tmuxのpaneをスプリットしたときなど,anacondaの環境がbaseに毎度戻るのが嫌で色々方法を調べてました. やりたいことは,現在のpaneでアクティブなcondaの環境をtmuxにも引き継いで欲しい,ということです.
ただ調べた限り,そのあたりの受け渡しは容易ではなさそうだったので,ディレクトリごとに環境変数を設定できるdirenvを使ってこれを実現することにしました.
今回の記事でできること
- 特定のディレクトリに入ると,そのディレクトリに設定してある環境変数を読み込み,conda環境を自動でactivateする
- そのディレクトリを出ると,conda環境がbaseに戻る
- tmuxとかでpaneを区切ってもカレントディレクトリが変わらない設定をしていれば,conda環境は自動で引き継ぎactivateされる
やりかた
direnvをインストール
% curl -sfL https://direnv.net/install.sh | bash % echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
$HOME/.direnvrcにconda activate関数を用意
conda環境名を引数に受け取り,activateする便利関数を用意しておきます.
% vi ~/.direnvrc activate_conda(){ eval "$(conda shell.zsh hook)" conda activate $1 }
環境を分けたいプロジェクトを作り,専用の.envrc
を作成
ここにcondaの環境名を定義します(名前は適当です).
% conda create -n MyAwesomeEnv % mkdir Awesome % cd Awesome % vi .envrc export THIS_CONDA_ENV=MyAwesomeEnv activate_conda $THIS_CONDA_ENV % direnv allow .
ディレクトリの出入りでconda envが変わっていることを確認
ディレクトリの出入りで,自動でbaseとMyAwesomeEnvの環境が変わってるのがわかります.
% conda env list # conda environments: # base /home/jonki/anaconda MyAwesomeEnv * /home/jonki/anaconda/envs/MyAwesomeEnv % cd ../ direnv: unloading % conda env list # conda environments: # base * /home/jonki/anaconda MyAwesomeEnv /home/jonki/anaconda/envs/MyAwesomeEnv % cd Awesome direnv: loading ~/work/Awesome/.envrc ---activate_conda(MyAwesomeEnv) direnv: export +CONDA_PREFIX_1 +THIS_CONDA_ENV ~CONDA_DEFAULT_ENV ~CONDA_PREFIX ~CONDA_PROMPT_MODIFIER ~CONDA_SHLVL ~PATH % conda env list # conda environments: # base /home/jonki/anaconda MyAwesomeEnv * /home/jonki/anaconda/envs/MyAwesomeEnv
Enjoy!
もっと簡単な方法あるよ!って方はぜひ教えて下さい.