PyCharm 中用于 Python 编译扩展的自动完成功能
Posted
技术标签:
【中文标题】PyCharm 中用于 Python 编译扩展的自动完成功能【英文标题】:Autocomplete in PyCharm for Python compiled extensions 【发布时间】:2011-06-30 07:23:22 【问题描述】:在使用已编译的扩展(例如 OpenCV Python 绑定)编写 Python 代码时,PyCharm 似乎并没有意识到它们的可用性。导入用灰色下划线标记,将“未解析的引用”作为工具提示,并且自动完成功能也不起作用。 (代码中已经使用的函数名除外。)
这不是由错误的模块路径引起的,代码在启动时运行没有错误。此外,在我将模块导入 Python shell 后,自动完成功能开始按预期工作。
是否有解决方案,或者这是编译扩展的架构限制?有没有其他 IDE 可以解决这个问题?
【问题讨论】:
【参考方案1】:我讨厌给出“适合我”的答案,但也许我环境的详细信息会帮助您最终确定问题。
我以前从未使用过 PyCharm,但我只是在 Mac 10.6.6 上使用 PyCharm 1.1.1 和 Macports opencv +python26 进行了测试。自动完成第一次对我来说很好。我还关闭并重新运行了 PyCharm,无需进一步操作即可自动完成。对于我尝试过的其他原生扩展,例如 cjson、procname,自动完成功能也没有问题。
.
可能是特定于平台的问题(Windows?),或者是影响旧版本 PyCharm 的错误?
【讨论】:
知道 9000 的解决方案,我想这是我安装东西的顺序(仅在 pycharm 扫描模块后才打开)产生了差异......(当然,如果你可以很容易地证伪这个假设以相同的顺序做事:))【参考方案2】:导入用灰色下划线标记,表示“未解析的引用”作为工具提示
这很可能意味着 PyCharm 看不到您导入的模块。在编辑模式下,PyCharm 依赖于导入模块的 Python 源的可用性。如果一个模块不是用 Python 编写的,而是一个 C 扩展模块,PyCharm 会生成一个包含函数原型的“骨架”,并使用它来完成。
在 shell 模式下,PyCharm 使用实时导入的对象来完成,结果略有不同。
确保您为项目选择的 Python 解释器(文件/设置/Python 解释器)可以看到您的 OpenCV 安装。如果解释器是正确的,请尝试删除并重新添加它(这有点耗时,抱歉)。
如果没有任何帮助,file a bug。
【讨论】:
谢谢,它有效!解释器的移除和重新添加触发了对所有可见扩展模块的重新扫描,包括 opencv 模块。 (值得等待:)) 顺便说一句,我们只是让骨架创建过程更快。 我还不能让 ctrl+space 与 OpenCV 一起工作。它只是说“没有建议”。我已将 cv.py、cv.pyc 和 cv2.pyd 复制到 c:\Python27\Lib\site-packages。执行“import cv”后,我在 Python 控制台中自动完成,但在 PyCharm 中没有。我错过了什么? 我在代码完成和链接到项目其他部分的类时遇到问题。将我的项目的包含路径添加到 Python 解释器的路径解决了这个问题。它也花了很长时间来处理,但成功完成。【参考方案3】:PyCharm 目前不扫描已编译的扩展/二进制文件,这些扩展/二进制文件位于手动添加到 IDE 解释器的路径中。我在YouTrack 中向 Jetbrains 提交了一个错误。你可能想看看它,可能还有我在他们的论坛中发起的讨论(链接在错误描述中)。如果您是面临同样问题的 PyCharm 用户,如果您能投票支持在 YouTrack 中解决此问题,我将不胜感激。
【讨论】:
【参考方案4】:尝试单击文件 | 中的“重新加载”按钮设置 | IDE 设置 | Python 解释器。这让它对我有用。
【讨论】:
PyCharm 2016.3 中不再有这样的东西了【参考方案5】:在我的 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
【讨论】:
【参考方案6】:我按照这个问题下的说明进行操作: How to install OpenCV on Windows and enable it for PyCharm without using the package manager
之后它不起作用,我重新安装了 pycharm ide,没有进行任何其他更改,现在它运行良好。 我知道这不是最好的答案,但是在浪费了很多时间并尝试了不同的解决方法之后,这是解决我问题的方法,我希望它可以帮助你。
【讨论】:
【参考方案7】:我注意到根据导入方式的不同,pycharm 的行为有所不同。 使用:
import cv2
自动完成不起作用,
同时:
from cv2 import cv2
自动完成工作
【讨论】:
【参考方案8】:我必须将二进制文件硬链接到我的解释器的 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 文件夹在这里:
【讨论】:
这非常适合我使用 python 3.6.9 构建的自定义 opencv 3.4.11 这正是缺少的。这应该在 PyCharm 常见问题解答中。 +1【参考方案9】:经过两天的测试,我终于解决了这个问题: 区别:
-
卸载python 3.7.2,安装python 3.7.7。
更改python安装的路径。(我强烈怀疑原因是我的
opencv-python
的PATH有一些汉字。应该只有英文)。
然后做:
-
安装
opencv-contrib-python
。
【讨论】:
【参考方案10】:在我的例子中,在路径 install-opencv-4-on-windows 中包含 opencv。并将其添加到项目设置中,如果这些都不适合您,我建议您安装 anaconda 更改 python 解释器并使用 anaconda 解释器。
为此转到:file -> settings -> project:test -> python interpreter
并选择 conda 解释器
如果你没有anaconda,你可以在https://www.anaconda.com/下载
按照链接python-opencv中的步骤在anaconda中安装opencv
【讨论】:
以上是关于PyCharm 中用于 Python 编译扩展的自动完成功能的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(148):在PyCharm中使用扩展工具运行Scrapy程序
Python爬虫编程思想(148):在PyCharm中使用扩展工具运行Scrapy程序