При использовании app = win32com.client.Dispatch('Some.Application')
есть ли какой-либо реальный способ получить автозавершение кода в PyCharm? Повторно набирать (или копировать-вставить) все из документации API довольно утомительно, поэтому создание скелетов < / а> быть. Нет ли другого способа сообщить PyCharm об интерфейсе, предоставляемом через COM, особенно если я могу предоставить файл .tlb
? Или есть хоть какой-то способ автоматически сгенерировать такой скелет (или модуль-оболочку?) Из TypeLib?
Как получить автозавершение кода для программирования COM в PyCharm?
Ответы (1)
Поскольку PyCharm не может узнать тип среды выполнения app
, вы не должны ожидать получения завершения кода на app
напрямую; по крайней мере, пока они не решат добавить встроенную поддержку генерации кода из библиотек типов.
Однако вы можете воспользоваться тем фактом, что win32com
неявно генерирует код на основе библиотеки типов, как описано в первой части этого ответа вместе с поддержкой PyCharm для подсказки типов, чтобы получить автозавершение кода для методов COM.
- Убедитесь, что типы Python были сгенерированы; их расположение определяется GUID COM-объекта. Например, типы для Microsoft Word 2016 на моем компьютере доступны в
C:\Users\username\appdata\local\temp\gen_py\3.6\00020905-0000-0000-c000-000000000046x0x8x7\
. - Добавьте эту папку в путь к вашему интерпретатору PyCharm Python; см. например этот ответ.
- Импортируйте модули, для которых вы хотите завершить код.
На скриншотах ниже мы используем этот подход с Word _ 5_:
Теперь, помимо ощущения грязи, этот подход полагается на то, что соответствующие типы были сгенерированы, а завершение кода ограничено методами, опубликованными объектом, поэтому я полагаю, что его полезность на практике может быть несколько ограничена; в частности, любой, кто работает над кодом, должен будет сгенерировать код, иначе аннотации вызовут NameError
s. Лично я, вероятно, предпочел бы использовать Jupyter для исследовательской части процесса реализации и с минимальными настройками, описанными в ответе, упомянутом выше, Jupyter можно расширить до полного завершения кода с помощью win32com
.
EnsureDispatch
. - person Tobias Kienzler   schedule 17.02.2017