Автозаполнение для объектов автоматизации в VS Code и Python
У меня установлены расширения Python для Windows. В PythonWin IDE я могу получить автозаполнение для объектов автоматизации (в частности, объектов, созданных с помощью win32com.client.Dispatch
):
Как я могу получить такое же автозаполнение в 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, предварительно загружающая определенные переменные в глобальное пространство имен.
Рекомендации
- Сообщение создателем расширения для устранения проблем с автозаполнением.
- Поток о том, как работает автозаполнение через PyScriptor
Я не думаю, что пример, который вы показываете с 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
ключ.