Visual Studio CodeのPython開発環境でオートコンプリートを有効化する

概要

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を使った場合)ので書いておいたほうが無難のようです。
上記のメモは以下のStackOverflowを参考にしました。
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を使ってヒストグラムをプロットできています。

1 Comment

  1. 高橋翔太

    2018-07-17 at 13:11

    同じくVS CodeでOpenCV開発を進めようとしていたため、非常に参考になりました。

    ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です