如何在 PyCharm 中获得 COM 编程的代码完成?

How to get code-completion for COM programming in PyCharm?

当使用app = win32com.client.Dispatch('Some.Application')时,有没有可行的方法在PyCharm中完成代码?必须重新输入(或复制粘贴)API 文档中的所有内容是相当乏味的,因此创建 skeletons 也是如此。有没有其他方法可以让 PyCharm 知道通过 COM 提供的接口,特别是如果我可以提供一个 .tlb 文件?或者至少有某种方法可以从 TypeLib 自动生成这样的骨架(或包装模块?)?

由于 PyCharm 无法知道 app 的运行时类型,因此您不应期望直接在 app 上获得代码完成;至少在他们决定添加对从类型库生成代码的内置支持之前不会。

但是,您可以利用 win32com 根据 the first part of this answer 中描述的类型库隐式生成代码这一事实,以及 PyCharm 对类型提示的支持,获取 COM 方法的代码完成。

  1. 确保Python类型已经生成;它们的位置由 COM 对象的 GUID 确定。例如,我机器上 Microsoft Word 2016 的类型可在 C:\Users\username\appdata\local\temp\gen_py.6[=13=]020905-0000-0000-c000-000000000046x0x8x7\.
  2. 将此文件夹添加到您的 PyCharm Python 解释器的路径中;参见例如this answer.
  3. 导入您想要代码完成的模块。

在下面的屏幕截图中,我们将这种方法与 Word Find:

现在,除了感觉很脏之外,这种方法依赖于已经生成的相关类型,并且代码完成仅限于对象发布的方法,所以我想它在实践中的用处可能会有所限制;特别是,任何处理代码的人都必须生成代码,否则注释将导致 NameErrors。就个人而言,我可能更喜欢将 Jupyter 用于实现过程的探索部分,并且通过 the answer mentioned above 中概述的最小调整,Jupyter 可以扩展为具有 win32com 的完整代码完成。