使用编译扩展(例如OpenCV Python绑定)编写Python代码时,PyCharm似乎并不知道它们的可用性。导入标有灰色下划线,将“未解析的引用”称为工具提示,自动完成也不起作用。 (除了代码中已经使用的函数名称。)
这不是由错误的模块路径引起的,代码在启动时运行时没有错误。此外,在我导入Python shell中的模块后,自动完成开始按预期工作。
是否有解决方案或者这是编译扩展的架构限制?有没有其他IDE能够解决这个问题?
答案 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文件夹在这里:
答案 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。
可能是特定于平台的问题(Windows?),还是影响旧版PyCharm的错误?