¿Cómo obtener la terminación de código para la progtwigción COM en PyCharm?

Cuando se utiliza app = win32com.client.Dispatch('Some.Application') , ¿existe alguna forma viable de completar el código en PyCharm? Es bastante tedioso tener que volver a escribir (o copiar y pegar) todo desde una documentación de la API, por lo que sería posible crear esqueletos . ¿No hay otra manera de informar a PyCharm sobre la Interfaz proporcionada a través de COM, especialmente si puedo proporcionar un archivo .tlb ? ¿O hay al menos alguna forma de generar automáticamente un esqueleto (o un módulo de envoltura) de TypeLib?

Como no hay forma de que PyCharm sepa el tipo de app tiempo de ejecución, no debe esperar que se complete el código directamente en la app ; al menos no hasta que decidan agregar soporte integrado para generar código desde bibliotecas de tipos.

Sin embargo, puede aprovechar el hecho de que win32com genera implícitamente un código basado en la biblioteca de tipos como se describe en la primera parte de esta respuesta , junto con el soporte de PyCharm para las sugerencias de tipo, para completar el código en los métodos COM.

  1. Asegúrese de que se hayan generado los tipos de Python; su ubicación está determinada por el GUID del objeto COM. Por ejemplo, los tipos para Microsoft Word 2016 en mi máquina están disponibles en C:\Users\username\appdata\local\temp\gen_py\3.6\00020905-0000-0000-c000-000000000046x0x8x7\ .
  2. Agrega esta carpeta a la ruta de tu intérprete de PyCharm Python; ver, por ejemplo, esta respuesta .
  3. Importe los módulos para los que desea completar el código.

En las capturas de pantalla a continuación, usamos este enfoque con Word’s Find :

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Ahora, además de sentirse sucio, este enfoque se basa en los tipos relevantes que se han generado y la finalización del código se limita a los métodos publicados por el objeto, por lo que imagino que su utilidad en la práctica podría ser algo limitada; en particular, cualquier persona que trabaje en el código tendrá que generar el código, o las anotaciones causarán NameError s. Personalmente, probablemente preferiría usar Jupyter para la parte exploratoria del proceso de implementación, y con los ajustes mínimos descritos en la respuesta mencionada anteriormente , se puede extender Jupyter para completar el código completo con win32com .