概要
Visual Studio Code(VSCode)でPythonのプログラムを効率良く書きたい、という時のためのちょっとしたTipsです。プログラムを書く上で、特に使用ライブラリの関数名やその引数は覚えきれず、いちいち調べるのは非常に手間です。オートコンプリート機能を有効化して上げると、こうした問題が解決してプログラムを書くのが非常に快適になります。
OpenCVやNumpy、Matplotlibなどの代表的な外部ライブラリでもオートコンプリート機能を使える方が望ましいですが、このあたりまで細かく書いている記事がWeb上でパッと見当たらなかったため、調査・試行錯誤して使えるようにしました。
環境
- Windows 10 (64bit)
- Python 3.6.1 (Anaconda 4.4)
- Python extension (ms-python.python) 2018.1
- Visual Studio Code 1.20.1
使用モジュール
- OpenCV
- Numpy
- Matplotlib
設定方法
VSCodeの設定ファイルsettings.json
に以下のようにライブラリへのパスを追記して、オートコンプリートエンジンが読み込めるようにしておきます。また、文法チェッカ(Lint)が正しく動作するように、オプションを追記しておきます。
設定メモ
python.autoComplete.extraPaths
を設定することが一番重要。python.autoComplete.preloadModules
は設定すると(私の環境では)オートコンプリートが動かなくなりました。python.linting.pylintArgs
は設定しなくともオートコンプリートが動くようですが、エラー扱いのコードとして扱われてしまう(特にcv2
を使った場合)ので書いておいたほうが無難のようです。
How do I get PyLint to recognize numpy members?
settings.json
は以下のようになっています。
{
"python.pythonPath": "C:\\ProgramData\\Anaconda3\\python.exe",
"python.autoComplete.addBrackets": true,
"python.autoComplete.extraPaths": [
"C:\\ProgramData\\Anaconda3\\Lib\\site-packages"
],
// "python.autoComplete.preloadModules": [
// "cv2",
// "numpy",
// "matplotlib"
// ],
"python.linting.pylintArgs": [
"--ignored-modules=numpy,cv2,matplotlib",
"--ignored-classes=numpy,cv2,matplotlib",
"--extension-pkg-whitelist=numpy,cv2,matplotlib"
]
}
試験用コード
OpenCVのチュートリアルにOpenCV, Numpy, Matplotlibの全てを試せるコードがあったため参考にしてコードを書いてみます。Histograms – 1 : Find, Plot, Analyze !!! Lint(pylint)に従って書いていくと、以下のようなコードになります。
# -*- coding: utf-8 -*-
"""
Test code for auto complete
"""
import cv2
import numpy as np
from matplotlib import pyplot as plt
IMAGE = cv2.imread("lena512color.tiff")
cv2.imshow("image", IMAGE)
cv2.waitKey(0)
COLOR = ('b', 'g', 'r')
plt.plot()
for idx, c in enumerate(COLOR):
hist, bins = np.histogram(IMAGE[:, :, idx].ravel(), 256, [0, 256])
plt.plot(hist, color=c)
plt.xlim([0, 256])
plt.show()
モジュール名の後に.(ドット)
を打てば関数候補一覧が出ます。また、入力後もマウスオーバーで関数の説明が出るようになりました。ちなみに、Numpyの
array
であるIMAGE
の後に.(ドット)
を打っても候補は出てこないようでした。恐らく、コード中に型指定が無くIMAGE
の中身が実行時までわからないためかと思います。
一応のスクリプト実行結果です。OpenCVで画像を読み込んで、Numpyで各カラー成分のヒストグラムを計算し、Matplotlibを使ってヒストグラムをプロットできています。
2018-07-17 at 13:11
同じくVS CodeでOpenCV開発を進めようとしていたため、非常に参考になりました。
ありがとうございます。