header_adsense

2016年4月21日木曜日

VisualStudioCode で Python 実行時にモジュールが import できない場合の対処法

これまで、Anacondaに同梱されていた Spyder という Python IDE を使って Python のコードを書いてデバッグもやっていて、特に問題はなかったのですが、どうにも重い感じがする。。。

最近エディタを Sublime Text から Visual Studio Code に変更して、Python の Extension も追加して VS Code 上で実行できるようにしました。

普段は問題なく実行できていたのですが、あるとき急にあるはずのモジュールがimportできないというエラーになって困ってしまいました。。。

ちなみに、問題となったモジュールは pydot という graphviz を python で使いやすくしてくれるものです。

python は幾つかのバージョンを共存させるためにpyenvで管理しているのですが、
現在は anaconda-2.3.0 を使用していて、pythonのバージョンをターミナルで確認すると

$ python -V
Python 2.7.11 :: Anaconda custom (x86_64)

となってる。
pydot がインストールされているかも確認してみます。

$ conda install pydot
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ....
Solving package specifications: .........

# All requested packages already installed.
# packages in environment at /Users/uroshika/.pyenv/versions/anaconda-2.3.0:
#
pydot                     1.0.28                   py27_0

やっぱりインストールされてる。なんで import できないんだ。。。
何かがおかしい。

実行時にpythonのバージョンを表示してみる


ひとまず実行時に python のバージョンを表示してみることにします。
実行している python コードに以下のように書いて実行してみましょう。

import sys

print (sys.version)

すると、

2.7.11 |Anaconda custom (x86_64)| (default, Dec  6 2015, 18:57:58)
[GCC 4.2.1 (Apple Inc. build 5577)]

こんな感じで表示されました。
「ちゃんと pyenv で管理してる Anaconda の python v2.7.11 を使用してますよ」と言っているらしい。

次に、Debug 実行してみると、

2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]

さっきと結果が違う。Anaconda の python じゃないものを使ってるみたい。
どうも、システムの python で実行しているらしい。

ということは、VS Code のデバッグ実行時に、pyenv で管理してるpython を使用するようにすれば大丈夫なはず!

VS Code の Debug 実行時に使用するpython を指定する


ただ、これを変更する方法を調べてみてもなかなか情報にたどり着けません。
そこで、「たぶん何か設定するところがあるやろう」と予想してました。

launch.json を開いて、Python の項目の途中に1行追加して「""」を入力します。
「""」の中で当てずっぽうで「python」と入力してみたら......



なんか、それっぽいのがあるじゃないですか!!!!

たぶんこの「pythonPath」に pyenv で管理してる Python のパスを指定してやれば良いはず。

ターミナルで 以下のコマンドを実行して、python の場所を確認します。

$ which python
/Users/uroshika/.pyenv/shims/python

※「uroshika」の部分は自分のユーザー名の読み替えてください。

あとは launch.json の “pythonPath” に、ここで表示された Python のパスを指定します。
変更したら保存して、もう一度 Debug 実行をやってみたら、無事 import Error にならずに実行できました。


0 件のコメント:

コメントを投稿