2017-12-20 322 views
9

Mam zainstalowane rozszerzenia Python dla systemu Windows. W ramach PythonWin IDE mogę autouzupełniania na obiektach automatyzacji (konkretnie obiektów utworzonych z win32com.client.Dispatch):Autouzupełnianie obiektów automatyzacji w kodzie VS i Pythonie

PythonWin IDE with autocomplete

Jak mogę dostać ten sam autouzupełniania w Kodeksie VS?

Używam Microsoft Python extension.

Rozszerzenia systemu Python dla systemu Windows zawierają narzędzie o nazwie COM Makepy, które najwyraźniej generuje reprezentacje obiektów automatyzacji w języku Python, ale nie wiem, jak z niego korzystać.

Aktualizacja

Podobno rozszerzenie Microsoft Python używa Jedi dla autouzupełniania.

Mam zgłoszenie issue w projekcie rozszerzenia na Github.

Zauważ, że generalnie mam IntelliSense w Pythonie; brakuje tylko obiektów IntelliSense na automatyzacji.

+0

Patrząc na różne rzeczy, rozszerzenia w Windows Python, kod Visual Studio. Wydaje się, że nie jest to możliwe od teraz. Prawdopodobnie gdy zaczną obsługiwać rozszerzenia z rozszerzeniami (* .pyi), łatwiej będzie je mapować. –

Odpowiedz

3

Nie sądzę, że przykład pokazany z PythonWin jest łatwo odtwarzalny w kodzie VS. Przewodnik szybkiej instalacji samego siebie (cytowany poniżej) mówi, że jest to możliwe tylko z przeglądarką COM lub dokumentacją produktu (Word w tym przypadku). Ta ostatnia jest mało prawdopodobna, więc PythonWin prawdopodobnie używa przeglądarki COM, aby znaleźć właściwości. A ponieważ PythonWin i win32com przychodzą w tym samym opakowaniu, nie jest tak mało prawdopodobne, że PythonWin ma wbudowany w przeglądarkę COM.

Skąd mam wiedzieć, które są dostępne metody i właściwości?

Dobre pytanie. To jest trudne! Trzeba użyć dokumentacji z produktami lub ewentualnie przeglądarką COM. Należy jednak pamiętać, że przeglądarki COM zazwyczaj polegają na tych obiektach, które rejestrują się na pewnych sposobach, a wiele obiektów nie robi tego. Po prostu oczekuje się, że wiesz.

Jeśli chciał taką samą funkcjonalność z VS Code plugin przeglądarka COM musiałyby zostać wprowadzone do Jedi (IntelliSense wtyczki Code VS).

Edit: znalazłem this sugestia, na jak autouzupełnianie, że można znaleźć te ukryte atrybuty, można zrobić:

Te owijarki robić różne rzeczy, które sprawiają, że analiza statyczna trudne, chyba mieliśmy do nich specjalny przypadek. Ogólnym rozwiązaniem dla takich przypadków jest uruchomienie do punktu przerwania i praca w stanie uruchomieniowym na żywo. Autouzupełnianie powinno zawierać pełną listę symboli , ponieważ sprawdza środowisko uruchomieniowe.

Rozmowa pochodzi z listy dyskusyjnej pytona IDE wingwide. Here widać, że realizowane są wyżej wymienionego podejścia:

Auto-Completer Icons

+0

Przepraszam, za tym tęskniłem. Wypróbowałem twój przykład i to działa dobrze dla mnie. Czy próbowałeś tylko "app.Visible", czy też próbowałeś wcześniej kod ("app = win32com.client.Dispatch ...")? Ponieważ dla mnie działa wszystko oprócz części "app.Visible". –

+0

Czy IntelliSense dla "app = win32com.client.Dispach ..." działa? –

+0

Próbowałem tego samego w PyCharm i nie mogłem zrobić ani IntelliSense w 'aplikacji'. Myślę (popraw mnie, jeśli się mylę), że IntelliSense, który pokazujesz na swoim przykładzie, działa tylko dlatego, że już napisałeś możliwe parametry, a IntelliSense zapamiętał. Aby uzyskać więcej informacji, patrz odpowiedzi pylang. –

2

Przegląd

I potwierdziły swój problem w VSCode, chociaż może to być możliwe IntelliSense działa dobrze. Uwaga Ctrl + Spacja wywołuje sugestie na wstępnie zdefiniowanym zmiennej:

enter image description here

Jednak nie wydaje się być atrybuty publiczne dostępne dla win32com.client domyślnie. Może dlatego funkcja IntelliSense nie działa.

test

Mając installed win32com dla Pythona 3.6, I potwierdziły następujący kod w Jupyter notebook, konsola ipython i natywnej 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("_")] 
# [] 

Ten problem ukrytych atrybutów not a new. Potwierdź ten test w innym środowisku/IDE. Może to być twoje środowisko lub konkretna wersja PythonWin wstępnie ładująca pewne zmienne w globalnej przestrzeni nazw.

Referencje

+0

Python Extensions dla Windows jest wyposażony w narzędzie 'makepy', które generuje statyczne definicje w' c: \ Program Files \ Python36 \ Lib \ site-packages \ win32com \ gen_py'. –

0

Myślę, że problem jest związany z definiowania Python interpreter.

Wybierz właściwą interpreter Pythona, wykonując polecenia python interpreter w VS Code poleceń palety naciskając f1 lub ctrl+shift+p klucz.