Python OpenCV: 奇怪的自动补全问题

当我使用pip将OpenCV安装好之后,使用visual-studio编写代码时,出现了一个奇怪的问题。使用import cv2导包后,当我输入cv2.时,自动补全并未提示OpenCV内部的函数,而是出现cv2sysos

auto-complete1

当我紧接着前一个cv2之后再输入一个cv2后,自动补全才可以正常地补全OpenCV内部的函数。但是大家应该知道,使用import导包后,使用其内部函数时,只需使用一次包名就可使用其中的函数,所以每次写完代码,我还得将多余的cv2删掉,很是麻烦。

我在网上搜索过多次,并未找到解决方法。我曾今怀疑是visual-studio的PTVS的缘故,可是有同学使用的pycharm也出现了同样的错误。所以我觉得可能是pip的原因,不过我并不知道该如何解决,希望有大神相助。

阅读 21.4k
4 个回答

目前已经算是解决了这个问题。
在上述问题中,我采用的是pip在线安装python-opencv,安装好之后,pip在python的安装路径下的Lib->site-packages中创建了一个文件夹CV2,也就是说python-opencv被安装在了Lib->site-packages->CV2中;而之后我改用第三方的一个离线安装包进行安装,其中opencv-python被安装在了Lib->site-packages下,并没有创建额外的文件夹。而采用后者,就不会出现上述问题。因此我推测上述问题的是pip在在线安装python-opencv造成的。
不过我现在并不明白为什么会这样。
我在网上查了很多类似的问题,其中很多人碰到的是不能补全的问题。我觉得他们遇到的可能是和我一样的问题,只是他们没有多写一个cv2所以才不能补全吧。

修改cv2文件夹下的__init__.py
这样就好了

# from . import cv2
# sys.modules['cv2'] = cv2

from .cv2 import *
sys.modules['cv2'] = cv2

这个锅谁该背==

不太清楚为什么,我只能帮你减少删除cv2的次数

from cv2 import cv2

vscode的自动补全使用jedi插件,问题出在插件上。

利用pip show jedi查看jedi插件安装位置。

注意vscode的用户设置中有选项:

 // Path to directory containing the Jedi library (this path will contain the 'Jedi' sub directory).
  "python.jediPath": "",

编辑此选项,配置好jedi路径即可,注意path到jedi文件夹的父目录,如下:

/Users/user_name/anaconda3/lib/python3.6/site-packages

注意:

  • 如果不是通过anaconda安装的python,则到python安装目录下的lib文件夹中查找。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏