PyCharm中Python编译扩展的自动完成

32 投票
11 回答
31018 浏览
提问于 2025-04-16 12:07

在用Python写代码的时候,如果使用了编译扩展(比如OpenCV的Python绑定),PyCharm似乎无法识别这些扩展的存在。导入的部分会被标记为灰色下划线,并显示“未解决的引用”这样的提示,自动补全功能也无法正常工作。(除了代码中已经使用过的函数名。)

这并不是因为模块路径错误,代码运行时没有报错。而且,当我在Python命令行中导入这些模块后,自动补全功能就能正常工作了。

有没有解决办法,还是说这是编译扩展的一个架构限制?有没有其他的开发环境能够处理这个问题?

11 个回答

6

我需要把这个二进制文件硬链接到我的解释器的lib-dynload文件夹里。

$ cd /usr/lib/python3.7/lib-dynload
$ sudo ln /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.cpython-37m-x86_64-linux-gnu.so cv2.cpython-37m-x86_64-linux-gnu.so

路径可能在你的环境中会有所不同。我没有在OSX或Windows上测试过,但可能也能在那儿用。lib-dynload文件夹的位置在这里:

项目结构

10

我发现,在使用不同的导入方式时,pycharm的表现有些不同。

使用:

import cv2

自动补全功能就不管用了,

而使用:

from cv2 import cv2

自动补全功能就能正常工作。

19

导入的部分下面有灰色下划线,提示“未解决的引用”。

这很可能意味着PyCharm看不到你导入的模块。在编辑模式下,PyCharm需要能找到你导入模块的Python源代码。如果一个模块不是用Python写的,而是用C语言扩展的,PyCharm会生成一个“骨架”,里面包含函数的基本信息,然后用这个来帮助你完成代码。

在命令行模式下,PyCharm会使用实时导入的对象来帮助你完成代码,结果会稍有不同。

确保你的OpenCV安装对你为项目选择的Python解释器是可见的(可以在文件/设置/Python解释器中查看)。如果解释器没问题,可以尝试先删除再重新添加它(这可能会花点时间,抱歉)。

如果还是不行,可以提交一个bug

撰写回答