はじめに
コジマです。
先日コンソールとJupyter NotebookでPythonの挙動が違うという悩みにぶちあたりまして、
原因色々探ってやっと解決したので、その覚書です。
前提条件
OSはmacです。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.14.2 BuildVersion: 18C54
私のしくじり
anacondaを複数インストールしてしまっていて、
コンソールで実行されるPythonとJupyter Notebookで実行されるPythonが別物になってました。
恥ずかしい。。。
私のしくじりを例に挙げて確認方法と対処方法を書いていきます。
Pythonの場所を確認する
Jupyter Notebookはanacondaの中に入っているので、
どちらもインストールしたanacondaの中のpythonを実行していればよいですね。
コンソール
コマンドファイルの場所を知りたいときはwhichコマンドを使います。
$ which python3.6 /Users/hogeuser/anaconda3/bin/python3.6
こんな感じになります。
ちなみに自分は3.6と打つのがめんどくさいので、普段はpythonだけで実行できるようにエイリアス作ってます。
Jupyter Notebook
たぶんこれが簡単だと思います。
なんか適当なライブラリをインポートして__file__を使用して
実行パスを取得します。
import os os.__file__
出力はこう
'/anaconda3/lib/python3.6/os.py'
私の場合はこんな感じでパスが違ってました。
どちらも絶対パスが同じanacondaに向いていなければなりません。
このようにどちらかトンチンカンなパスを示している場合はこう対処します。
Jupyter Notebookの環境を正としたいので、pythonの実行パスをJupyter Notebookの実行環境に合わせます。
対処方法
以下の2手順を踏んで対応しました。
1:.bash_profileの設定
~/.bash_profileはコンソールを開いた時に予め実行するコマンドを定義します。
今回は/anaconda3/bin/にパスを設定します。
以下のようにファイルを記述します。
export PATH="/anaconda3/bin:$PATH"
exportコマンドで環境変数PATHを定義します。
コマンドを実行する時にはこのPATHに指定されたパスの中を見にいきます。
macやLinuxの場合はPythonの2系が予め/usr/local/binあたりにありそうな気がしますが、
同じ名前の実行ファイルがある場合は先に定義した方が優先されます。
/anaconda3/binをはじめに定義することで、確実に/anaconda3内(使いたいパス)のPythonを実行できるようになります。
変更を適用するためにはコンソールを再起動してください。
2:いらんanacondaとはバイバイ
/Users/hogeuserの中にいたいらんanacondaに別れを告げます。
rmでごっそりいっちゃいます。
sudo rm -rf ~/anaconda3
管理者権限がいるのでsudoマストです。
~はホームフォルダ(/Users/hogeuser)です。
Windowsで言う所の%USERPROFILE%にあたります。
これでスッキリ。わずらわしいものがなくなりました。
さいごに
環境周りでしくじりたくないですよね。。
一気に疲れてしまいます。
同じしくじりをしてしまった方は助けになれば幸いです。
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
以上、コジマでした。