Как получить автозавершение кода для программирования COM в PyCharm?

При использовании app = win32com.client.Dispatch('Some.Application') есть ли какой-либо реальный способ получить автозавершение кода в PyCharm? Повторно набирать (или копировать-вставить) все из документации API довольно утомительно, поэтому создание скелетов < / а> быть. Нет ли другого способа сообщить PyCharm об интерфейсе, предоставляемом через COM, особенно если я могу предоставить файл .tlb? Или есть хоть какой-то способ автоматически сгенерировать такой скелет (или модуль-оболочку?) Из TypeLib?


person Tobias Kienzler    schedule 16.02.2017    source источник
comment
Сильно связано: Как использовать win32com-autocompletion? - Я заметил, что через несколько лет я снова задаю аналогичные вопросы ... Однако другой вопрос касается ipython и EnsureDispatch.   -  person Tobias Kienzler    schedule 17.02.2017


Ответы (1)


Поскольку PyCharm не может узнать тип среды выполнения app, вы не должны ожидать получения завершения кода на app напрямую; по крайней мере, пока они не решат добавить встроенную поддержку генерации кода из библиотек типов.

Однако вы можете воспользоваться тем фактом, что win32com неявно генерирует код на основе библиотеки типов, как описано в первой части этого ответа вместе с поддержкой PyCharm для подсказки типов, чтобы получить автозавершение кода для методов COM.

  1. Убедитесь, что типы Python были сгенерированы; их расположение определяется GUID COM-объекта. Например, типы для Microsoft Word 2016 на моем компьютере доступны в C:\Users\username\appdata\local\temp\gen_py\3.6\00020905-0000-0000-c000-000000000046x0x8x7\.
  2. Добавьте эту папку в путь к вашему интерпретатору PyCharm Python; см. например этот ответ.
  3. Импортируйте модули, для которых вы хотите завершить код.

На скриншотах ниже мы используем этот подход с Word _ 5_:

введите здесь описание изображения

введите здесь описание изображения

Теперь, помимо ощущения грязи, этот подход полагается на то, что соответствующие типы были сгенерированы, а завершение кода ограничено методами, опубликованными объектом, поэтому я полагаю, что его полезность на практике может быть несколько ограничена; в частности, любой, кто работает над кодом, должен будет сгенерировать код, иначе аннотации вызовут NameErrors. Лично я, вероятно, предпочел бы использовать Jupyter для исследовательской части процесса реализации и с минимальными настройками, описанными в ответе, упомянутом выше, Jupyter можно расширить до полного завершения кода с помощью win32com.

person fuglede    schedule 03.12.2017