半年くらい前にvscodeからneovimに乗り換えたのですが、opencvの補完だけが正常に動いてくれないということがあって悩んでいました。numpyとかは普通に補完が効くのですが、例えば以下のようなコードを書いてみると、
import cv2
img = cv2.imread('sample.png')
cv2.imshow('img', img)
cv2.waitKey(0)
こんな風にneovim上で怒られてしまいます。ただし、ターミナル上では問題なくこのコードは動きます。
解決策
このissueを参考にしました。
以下のようにターミナル上でコマンドを打つと解決します。
$ pip install mypy
$ python3 -c 'import cv2; print(cv2)'
$ stubgen -m cv2 -o {cv2-package-folder}
$ cd {cv2-package-folder}
$ mv cv2.pyi __init__.pyi
1行目で、opencvが入っているディレクトリが出力されます。例えば次のようなものです。
<module 'cv2' from '/opt/homebrew/var/pyenv/versions/test/lib/python3.9/site-packages/cv2/__init__.py'>
ここのfrom以下の
/opt/homebrew/var/pyenv/versions/test/lib/python3.9/site-packages/cv2
が、{cv2-package-folder}を指しています。
あとは上記のコマンド通りに行えば大丈夫なはずです。