在 PyCharm 中键入提示特定模块

Posted

技术标签:

【中文标题】在 PyCharm 中键入提示特定模块【英文标题】:Type hint a specific module in PyCharm 【发布时间】:2021-09-12 22:52:06 【问题描述】:

考虑以下代码:

PyCharm 会自动感知这是一个可以引用一个或多个支持库的模块。

是否也可以为其他模块变量手动指定这个?类似于以下内容:

from pyqtgraph.Qt import QtWidgets
QtWidgets: Union[PyQt5.QtWidgets.pyi, PySide2.QtWidgets.pyi] # <-- I want to add this type hint

在幕后,pyqtgraph 正在动态构造虚拟QtWidgets 以在运行时指向多个库之一,但 PyCharm 不知道这一点。有没有办法让我手动将该类型提示 (QtWidgets.pyi) 添加到我导入的模块(在本例中为 pyqtgraph.Qt.QtWidgets)?

我也发了here,供参考。

【问题讨论】:

【参考方案1】:

正如您在此处看到的,它没有向我显示sys.Test 的提示,因为它不存在。 你能做什么 - 你可以使用存根,也就是 .pyi 文件。 我刚刚添加了一个sys.pyi 文件,[它必须与您的模块命名相同,在您的情况下为pyqtgraph.pyi]。 它不评估文件,而是使用它来收集类型提示。 结果是

sys.pyi的内容是:

Test: bytes

您可以在此处阅读有关存根的信息:https://www.jetbrains.com/help/pycharm/stubs.html

【讨论】:

这行得通,谢谢!我将它与***.com/a/63552927/9463643 结合起来以避免存根整个库,所以我只是将您的pyi解决方案添加到动态模块中。 编辑:链接的 SO 帖子实际上并没有为其余方法提供智能感知——它只是防止 PyCharm 引发错误......看起来必须在任何地方或任何地方定义存根,然后...... . 关注youtrack.jetbrains.com/issue/PY-46104 存根仅用于类型提示,不会在任何地方执行。 对——但目前在 PyCharm 中,如果您为单个子模块添加存根,PyCharm 希望您为其他所有内容提供存根,否则会破坏所有剩余的代码完成 哇,我不知道,我的工作完美,因为它搜索 .pyi 文件,如果它没有找到任何特定模块,它只使用普通的 .py 文件收集类型提示。无论如何感谢您的承认!

以上是关于在 PyCharm 中键入提示特定模块的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu中pycharm安装package提示Install packaging tools解决

为啥 PyCharm 不建议为 django 模型自动填充?

pycharm的安装

我已经用pip安装了statsmodels 但是pycharm中找不到它,pycharm也无法安装

Python中的getpass模块

pychar中如何装mysql