luggage baggage

Machine learning, data analysis, web technologies and things around me.

conda の環境名に応じて ipython / jupyter notebook の起動時読み込みライブラリを変更させる

こんにちは。吉田弁二郎です。

ipython コンソールや jupyter notebook をお使いの方は、起動時の自動処理設定ができることをご存知かもしれません。具体的には、

~/.ipython/profile_default/startup

に置かれたスクリプトが起動時に自動的に読み込まれます。適当に numpy などを import するスクリプトを用意しておけば、 毎回手作業する苦痛から解放されるわけですね。

ところで、anaconda / conda でパッケージ管理する場合、

conda create -n another_env python=3.6 numpy pandas

などとして独立した開発環境 (another_env) を用意して作業を進めることも多いと思います。今回は、独立した conda 環境ごとに ipython 起動時に読み込まれるライブラリを自動的に変えるための startup スクリプトを書いたので、ここに紹介しておきます。

概要

ポイントは、現在利用中の conda 環境名をどう取得するか、です。例えば tensorflow 開発用の環境 tf があったとして、

~$ source activate tf
(tf) ~$

と括弧の中に表示される文字列を取得できればよいわけですね。

やり方としては、

import subprocess
envs = subprocess.check_output(['conda-env', 'list']).splitlines()
env = list(filter(lambda s: '*' in str(s), envs))[0]
name = env.decode('utf-8').split('*')[0].strip()

とすればOKです*1。本当なら conda env-name みたいなコマンドが用意されていると便利だと思いますが、まあ無いものは作るということで。もっとスマートな書き方もある気がするので、お気づきの方は教えてください!

コードはこちらにあるので、ご自由にお使いください。
https://github.com/dlnp2/blog/blob/master/misc/00-first.py
startup スクリプト内でのみ使う変数は最後に del して名前空間から消すようにしています(そうしないと意図せずに変数に値が定義された状態になって不都合が生じる可能性があるため)。

確認環境

  • macOS Sierra 10.12.2
  • Anaconda3-4.3.1 / conda-env
  • Python 3.5.3
  • IPython 5.3.0

*1:ほぼ http://stackoverflow.com/questions/36539623/how-do-i-find-the-name-of-the-conda-environment-in-which-my-code-is-running に挙げられているやり方なのですが、そのままだと動かなかったので修正しています。