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

时间:2011-02-19 08:57:02

标签: python autocomplete pycharm

使用编译扩展(例如OpenCV Python绑定)编写Python代码时,PyCharm似乎并不知道它们的可用性。导入标有灰色下划线,将“未解析的引用”称为工具提示,自动完成也不起作用。 (除了代码中已经使用的函数名称。)

这不是由错误的模块路径引起的,代码在启动时运行时没有错误。此外,在我导入Python shell中的模块后,自动完成开始按预期工作。

是否有解决方案或者这是编译扩展的架构限制?有没有其他IDE能够解决这个问题?

8 个答案:

答案 0 :(得分:17)

  

导入标有灰色下划线,将“未解析的参考”称为工具提示

这很可能意味着PyCharm无法看到您导入的模块。在编辑模式下,PyCharm依赖于导入模块的Python源的可用性。如果模块不是用Python编写的,而是C扩展模块,PyCharm会生成一个包含函数原型的“骨架”,并将其用于完成。

在shell模式下,PyCharm使用实时导入的对象来完成,结果略有不同。

确保您为项目选择的Python解释器(文件/设置/ Python解释器)可以看到您的OpenCV安装。如果解释器是正确的,请尝试删除并重新添加它(这很费时,抱歉)。

如果没有任何帮助,file a bug

答案 1 :(得分:3)

PyCharm目前不扫描编译的扩展/二进制文件,这些扩展名/二进制文件位于手动添加到IDE中的解释器的路径中。我在YouTrack中向Jetbrains提交了一个错误。您可能希望看一下它以及我在他们的讨论论坛中发起的讨论(链接在错误描述中)。如果你是一个面临同样问题的PyCharm用户,如果你能投票支持在YouTrack中解决这个问题,我将不胜感激。

答案 2 :(得分:3)

尝试点击文件|中的“重新加载”按钮设置| IDE设置| Python解释器。这让它对我有用。

答案 3 :(得分:3)

我不得不将二进制文件硬链接到我的解释器的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文件夹在这里: Project Structure

答案 4 :(得分:0)

在我的OS X 10.8和PyCharm 3的案例中,IDE自动选择不同的Python安装。我在Eclipse Pydev中注意到了这一点,它拿起了正确的一个并按预期工作。要注意两者之间的区别并不容易: /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python

答案 5 :(得分:0)

我按照此问题下的说明操作: How to install OpenCV on Windows and enable it for PyCharm without using the package manager

之后它不起作用,我重新安装pycharm ide而没有任何其他更改,现在它工作正常。 我知道这不是最好的答案,但是经过大量的时间浪费并尝试不同的解决方法,这就解决了我的问题,我希望它可以帮到你。

答案 6 :(得分:0)

我注意到pycharm行为的差异取决于导入方式。 使用:

import cv2

自动完成功能不起作用

同时使用:

from cv2 import cv2

自动完成工作

答案 7 :(得分:-1)

我讨厌给出“为我工作”的答案,但也许我的环境细节可以帮助您找出问题。

我之前从未使用过PyCharm,但我只是使用PyCharm 1.1.1在Mac 10.6.6上进行了测试,使用Macports opencv + python26。第一次自动完成对我来说很好。我也关闭并重新运行PyCharm并且能够自动完成而不做任何进一步的操作。对于我尝试过的其他原生扩展,我也没有问题,例如cjson,procname。

Pycharm 1.1.1 importing opencv with autocomplete

可能是特定于平台的问题(Windows?),还是影响旧版PyCharm的错误?