Автозаполнение для объектов автоматизации в VS Code и Python

У меня установлены расширения Python для Windows. В PythonWin IDE я могу получить автозаполнение для объектов автоматизации (в частности, объектов, созданных с помощью win32com.client.Dispatch):

PythonWin IDE с автозаполнением

Как я могу получить такое же автозаполнение в VS Code?

Я использую расширение Microsoft Python.

Python Windows Extensions имеет инструмент под названием COM Makepy, который, очевидно, генерирует представления Python для объектов автоматизации, но я не могу понять, как его использовать.

Обновить

По-видимому, расширение Microsoft Python использует Jedi для автозаполнения.

Я подал вопрос о проекте расширения на Github.

Обратите внимание, что в целом у меня есть Intellisense в Python; мне не хватает только объектов Intellisense для автоматизации.

3 ответа

Обзор

Я подтвердил вашу проблему в VSCode, хотя возможно, что IntelliSense работает нормально. Примечание. Ctrl+Space вызывает предложения для предварительно определенной переменной:

Однако, по-видимому, нет открытых атрибутов, доступных для win32com.client по умолчанию. Это может быть, почему IntelliSense не работает.

Тестовое задание

Установив win32com для Python 3.6 я подтвердил следующий код в записной книжке Jupyter, консоли IPython и в собственном Python REPL:

import win32com.client


app = win32com.client.Dispatch("Word.Application")
len(dir(app))
# 55
[x for x in dir(app) if not x.startswith("_")]
# []

Эта проблема скрытых атрибутов не является новой. Пожалуйста, подтвердите этот тест в другой среде /IDE. Это может быть ваша среда или конкретная версия PythonWin, предварительно загружающая определенные переменные в глобальное пространство имен.

Рекомендации

Я не думаю, что пример, который вы показываете с PythonWin легко воспроизводится в VS Code. Краткое руководство по началу работы win32com Сам (цитируется ниже) говорит, что это возможно только с COM-браузером или документацией продукта (в данном случае Word). Последнее маловероятно, поэтому PythonWin вероятно, использует COM-браузер, чтобы найти свойства. И потому что PythonWin а также win32com прийти в той же упаковке, это не так уж мало вероятно, что PythonWin имеет встроенный COM-браузер

Как узнать, какие методы и свойства доступны?

Хороший вопрос. Это трудно! Вам необходимо использовать документацию с продуктами или, возможно, COM-браузер. Однако обратите внимание, что COM-браузеры обычно полагаются на то, что эти объекты регистрируют себя определенным образом, а многие объекты этого не делают. Вы просто должны знать.

Если вы хотите получить ту же функциональность от плагина VS Code, в Jedi должен быть встроен COM-браузер (IntelliSense плагина VS Code).

Изменить: я нашел это предложение о том, как автоматическое заполнение, которое может найти эти скрытые атрибуты, может быть сделано:

Эти обертки делают разные вещи, которые затрудняют статический анализ, если только мы не будем их специально рассматривать. Общее решение для таких случаев - запуск до точки останова и работа в режиме реального времени выполнения. Затем автозаполнитель должен включать полный список символов, поскольку он проверяет среду выполнения.

Разговор происходит из списка рассылки Python IDE по всему миру. Здесь вы можете видеть, что они реализовали вышеупомянутый подход:

Автозаполнение Иконки

Я думаю, что ваша проблема связана с определением Python interpreter,

Выберите правильный интерпретатор Python, выполнив python interpreter команда в VS Code палитра команд нажатием f1 или же ctrl+shift+p ключ.

Другие вопросы по тегам