2017-02-16 17 views
2

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

+1

Сильно связаны: [Как получить win32com-автозаполнение?] (Https://stackoverflow.com/q/26990655/321973) - Я замечаю, что через несколько лет я снова задаю подобные вопросы ... Другой вопрос однако спросите о [tag: ipython] и 'EnsureDispatch'. –

ответ

3

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

Однако вы можете использовать тот факт, что win32com неявно генерирует код на основе библиотеки типов, как описано в the first part of this answer, а также поддержку 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; см., например, this answer.
  3. Импортируйте модули, для которых вы хотите завершить код.

В скриншотах ниже, мы используем этот подход с Find Уорда:

enter image description here

enter image description here

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

+0

Звучит как лучший вариант, спасибо –