テック

MacのAnacondaでターミナルからEnvironmentの切り替えを行う

Anacondaの環境切り替え忘れで出るエラー

「chainerというモジュールがないよ」というメッセージなのだが、Openpose用に環境構築をしたはずなのでそんなわけがない。
こういうときは環境の切り替え忘れが起こってることが多い。

上の場合は「conda info -e」でAnacondaで導入した環境一覧を確認、その後「source activate Openpose」でOpenposeという環境を実行している。

環境から出るときは以下の通り。

あまりなれてないうちは、Anacondaで仮想環境を構築したのは良いものの、環境構築やモジュールの導入ができているのにもかかわらず、環境の切り替えができておらず、上記のようにプログラムが動かないということに気づかない。

おそらく、多くのプログラミングを始めたばかりの人はこういった簡単なところで躓いているような気がする。自分もせっかちなのでターミナルでコマンドを実行すれば、すぐに先ほど導入した環境が使えるはずだと思うのはよく分かる。

Anaconda Navigatorはターミナルからコマンドを打たなくても簡単にAnaconda上に複数の仮想環境を構築できる。モジュールのインストールもコマンドを打たなくても検索してインストールできるように作られている。

仮想環境への切り替えがめんどうくさい

しかし実際使うときはそのコードを実行するに必要な仮想環境に切り替えが必要である。当たり前の話のようだが、初心者やせっかちな人にとっては理解しにくいところがありそうだ。

また、最初のうちはターミナルを魔法の画面だと思っていて、とにかく開いてなんらかのコードを打てば自動的に実行されると思っていたことがある。先ほどのコードで説明すれば、

このコードは「pose_iter_440000.caffemodel」と「convert_model.py」が必要である。
加えて環境としてPythonが使えること、そしてposenetというモジュールが必要である。(これらの環境をまとめてAnacondaで一つの仮想環境として設定している)

よって、このコード一本を動かすためにはPython(モジュールのposenetインストール済みのもの)が使える環境下において、「pose_iter_440000.caffemodel」と「convert_model.py」が入っているフォルダ内で、上記コードを実行する必要がある。

ターミナルから実行する場合は、自分が作成した仮想環境を起動した上で、「cd」などを使用して目的のフォルダまで移動した上でコードを実行する必要がある。つまり、言いたいのはターミナルでコードを打ったところでなんでも実行されるという魔法の画面ではない!
これを我々は当たり前のようにやってるが、何もわからないときにぶち当たると結構心が折れる。

環境構築がプログラミングをつまらなくしてる説

最近思うのは、例えばLEGOなどでプログラミングのロジックを学ぶことはできても、現実にはその環境を使えるようにするのが一苦労だということである。自分はSEをしたことがないので現場がわからないが、会社から支給されたPC等は環境がセッティング済みなのだろうか。

今回使っているAnacondaのようなツールはその手間をかなり簡単にした画期的なアイテムではあるけれども、まだまだ全く経験がない人が柔軟に、直感的な方法でアイデアが試せるような環境には至っていない。(複数環境を使わなくてはならないという時点で、いろいろ試してる人なので、そういった心配をする必要はないのかもしれないが・・・)