我如何在 .pyi 文件中声明原始模块中的部分字段?

How I can declare in .pyi file only part of fields from original module?

它在 PyCharm 2016 年有效,但在 PyCharm 2017 年无效:

"Solution": PyCharm 2017。2.x 从 typing 支持 NamedTuple,我不再需要使用 .pyi 文件。

编辑#1:

我发现了这个问题:https://youtrack.jetbrains.com/issue/PY-18597 并且有一个答案:

PyCharm 2017.1 EAP builds now always prefer stub files over Python files found on the Python path.

意味着 Pycharm 将查找 .pyi 文件中存在的内容,如果这样的文件存在,它将使用 作为参考。所以你别无选择,只能在 .pyi 文件中声明所有函数。

您可以在 here

中找到一些关于如何避免潜在烦人的警告和错误的知识

编辑#2:

是的,我可以确认 from ... import * 在 PyCharm 中没有按预期工作,这可能是一个错误,您可以为其打开一个问题(或者如果有人成功地完成了这项工作,请请告诉我们怎么做)!

我找到了基于此引用的解决方法:

Modules and variables imported into the stub are not considered exported from the stub unless the import uses the import ... as ... form or the equivalent from ... import ... as ... form.

如果您:from file_a import a as a, b as b ... 那么一切都会按预期取消标记,但在 from file_a ... 会给您以下警告:

Import resolves to its containing file... (Ctrl+F1) 
This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.

不要惊慌,正如所解释的那样here这是一个关于模块名称可能被您的文件名隐藏的警告(这不适用于您的情况!)