Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas opracowywania projektów w Pythonie, możesz przejść do okna poleceń, aby wykonywać określone skrypty lub moduły, uruchamiać polecenia pip lub używać innych narzędzi do pracy z kodem. Aby ulepszyć przepływ pracy, możesz dodać niestandardowe polecenia do menu projektu Python w programie Visual Studio. Niestandardowe polecenia języka Python mogą być uruchamiane w oknie konsoli lub w oknie dane wyjściowe programu Visual Studio. Możesz również użyć wyrażeń regularnych, aby poinstruować program Visual Studio, jak analizować błędy i ostrzeżenia z danych wyjściowych polecenia.
Warunki wstępne
- Program Visual Studio w systemie Windows zainstalowany z obsługą obciążeń języka Python. Aby uzyskać więcej informacji, zobacz Instalowanie obsługi języka Python w programie Visual Studio.
Program Visual Studio dla komputerów Mac nie jest obsługiwany. Aby uzyskać więcej informacji, zobacz Co się dzieje z programem Visual Studio dla komputerów Mac? program Visual Studio Code w systemach Windows, Mac i Linux dobrze współpracuje z językiem Python za pośrednictwem dostępnych rozszerzeń.
Eksplorowanie poleceń niestandardowych
Domyślnie menu projektu Python zawiera dwa polecenia, Uruchom PyLint i UruchomMypy:
Dowolne niestandardowe polecenia języka Python, które zdefiniujesz, pojawią się w tym samym menu. Polecenie niestandardowe może odwoływać się do pliku Python, modułu Python, wbudowanego kodu Python, dowolnego pliku wykonywalnego lub polecenia pip. Możesz również określić, w jaki sposób i gdzie uruchamiane jest polecenie.
Możesz dodawać polecenia niestandardowe na kilka sposobów:
Zdefiniuj polecenia niestandardowe w pliku projektu języka Python (.pyproj) bezpośrednio. Te polecenia dotyczą tego konkretnego projektu.
Zdefiniuj polecenia niestandardowe w pliku .targets (.targets). Możesz łatwo zaimportować polecenia w tym pliku, aby używać ich z wieloma projektami.
Utwórz projekt w języku Python na podstawie szablonu projektu w programie Visual Studio, który definiuje niestandardowe polecenia języka Python.
Niektóre szablony projektów języka Python w programie Visual Studio dodają polecenia niestandardowe przy użyciu pliku targets. Szablony Bottle Web Project i Flask Web Project dodają dwa polecenia, Start server i Start debug server. Szablon projektu internetowego Django dodaje następujące polecenia i kilka innych:
Załaduj ponownie projekt, aby uzyskać dostęp do poleceń niestandardowych
Jeśli projekt zostanie otwarty w programie Visual Studio, jeśli wprowadzisz zmiany w odpowiednim pliku projektu w edytorze, musisz ponownie załadować projekt, aby zastosować zmiany. Podobnie, po zdefiniowaniu niestandardowych poleceń w pliku projektu języka Python, należy ponownie załadować projekt, aby polecenia pojawiły się w menu projektu Python. Podczas modyfikowania poleceń niestandardowych zdefiniowanych w pliku docelowym należy ponownie skompilować pełne rozwiązanie programu Visual Studio dla dowolnego projektu, który importuje ten plik docelowy.
Typowym podejściem jest wprowadzenie zmian w pliku projektu języka Python bezpośrednio w programie Visual Studio:
Otwórz projekt w języku Python w programie Visual Studio. (Po otwarciu projektu w programie Visual Studio projekt jest domyślnie ładowany).
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Python i wybierz pozycję Odładuj projekt.
Program Visual Studio zwalnia projekt i otwiera odpowiedni plik projektu w języku Python (.pyproj) w edytorze.
Jeśli plik projektu nie zostanie otwarty, ponownie kliknij prawym przyciskiem myszy projekt języka Python i wybierz Edytuj plik projektu:
Wprowadź zmiany w pliku projektu w edytorze programu Visual Studio i zapisz swoją pracę.
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy niezaładowany projekt i wybierz Załaduj ponownie projekt. Jeśli spróbujesz ponownie załadować projekt bez zapisywania zmian w pliku projektu, program Visual Studio wyświetli monit o ukończenie akcji.
Proces rozładunku, edycji, zapisu i ponownego ładowania może stać się żmudny podczas tworzenia poleceń niestandardowych. Bardziej wydajny przepływ pracy obejmuje jednoczesne ładowanie projektu w programie Visual Studio i otwieranie pliku projektu w języku Python w osobnym edytorze. Możesz użyć dowolnego edytora, takiego jak inne wystąpienie programu Visual Studio, Visual Studio Code, Notatnik itd. Po zapisaniu zmian w edytorze i przełączeniu się z powrotem do programu Visual Studio program Visual Studio wykrywa zmiany pliku projektu dla otwartego projektu i monituje o podjęcie akcji:
Wybierz pozycję Załaduj ponownie lub Załaduj ponownie wszystkie, a program Visual Studio natychmiast zastosuje zmiany w pliku projektu do projektu otwartego.
Dodawanie poleceń niestandardowych z plikiem projektu
Poniższa procedura przedstawia sposób tworzenia polecenia niestandardowego przez dodanie definicji w pliku projektu języka Python (.pyproj) i ponowne załadowanie projektu w programie Visual Studio. Polecenie niestandardowe uruchamia plik startowy projektu bezpośrednio za pomocą polecenia python.exe
, które jest zasadniczo takie samo jak użycie opcji Debugowanie>Uruchom bez debugowania na głównym pasku narzędzi Visual Studio.
W programie Visual Studio utwórz nowy projekt w języku Python o nazwie
Python-CustomCommands przy użyciu szablonu aplikacji języka Python. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie projektu w języku Python na podstawie szablonu. Program Visual Studio tworzy projekt w języku Python i ładuje go do sesji. Projekt można skonfigurować za pomocą pliku projektu (.pyproj). Ten plik jest widoczny tylko w programie Visual Studio, gdy projekt jest otwarty, ale niezaładowany. Projekt zawiera również plik języka Python (.py) dla kodu aplikacji.
Otwórz plik aplikacji Python_CustomCommands.py w edytorze i dodaj następujący kod:
print("Hello custom commands")
W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt języka Python, wybierz pozycję Pythoni zwróć uwagę na polecenia w menu kontekstowym. Obecnie jedynymi poleceniami w menu kontekstowym są Run PyLint i Run Mypy. Podczas definiowania poleceń niestandardowych są one również wyświetlane w tym menu.
Uruchom oddzielny edytor poza sesją programu Visual Studio i otwórz plik projektu języka Python (Python-CustomCommands.pyproj) w edytorze. (Pamiętaj, aby otworzyć plik projektu (.pyproj), a nie plik aplikacji języka Python (.py).)
W pliku projektu znajdź element zamykający
</Project>
na końcu pliku i dodaj następujący kod XML bezpośrednio przed elementem zamykającym:<PropertyGroup> <PythonCommands> $(PythonCommands); </PythonCommands> </PropertyGroup>
Zapisz zmiany w pliku projektu i wróć do programu Visual Studio. Program Visual Studio wykrywa zmiany w pliku projektu i monituje o podjęcie akcji. Po wyświetleniu monitu wybierz pozycję Załaduj ponownie, aby zaktualizować otwarty projekt za pomocą zmian w pliku projektu.
W Eksploratorze rozwiązańkliknij prawym przyciskiem myszy projekt Python, wybierz Pythoni sprawdź polecenia w menu kontekstowym.
W menu kontekstowym nadal są wyświetlane tylko polecenia Run PyLint i Run Mypy. Właśnie dodany kod do pliku projektu replikuje domyślną grupę właściwości
<PythonCommands>
zawierającą polecenie PyLint. W następnym kroku dodasz więcej kodu dla polecenia niestandardowego.Przejdź do edytora, w którym aktualizujesz plik projektu. Dodaj następującą definicję elementu
<Target>
w elemecie<Project>
. Definicję<Target>
można ustawić przed lub po opisanej wcześniej definicji<PropertyGroup>
.Ten element
<Target>
definiuje niestandardowe polecenie, aby uruchomić plik startowy dla projektu (zidentyfikowany przez właściwość StartupFile) przy użyciu poleceniapython.exe
w oknie konsoli. Definicja atrybutuExecuteIn="consolepause"
używa konsoli, która czeka na wybranie klucza w celu zamknięcia okna konsoli.<Target Name="Example_RunStartupFile" Label="Run startup file" Returns="@(Commands)"> <CreatePythonCommandItem TargetType="script" Target="$(StartupFile)" Arguments="" WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="consolepause"> <Output TaskParameter="Command" ItemName="Commands" /> </CreatePythonCommandItem> </Target>
Zastąp grupę właściwości
<PythonCommands>
(dodaną w kroku 5) następującym kodem XML. Ta składnia definiuje atrybutName
dla elementu<Target>
, który dodaje polecenie niestandardowe do menu kontekstowego Python. Polecenie ma etykietę menu Uruchom plik startowy.<PythonCommands> $(PythonCommands); Example_RunStartupFile </PythonCommands>
Napiwek
Jeśli chcesz, aby niestandardowe polecenie było wyświetlane w menu kontekstowym przed domyślnymi poleceniami zdefiniowanymi w tokenie
$(PythonCommands)
, umieść składnię polecenia<Target>
przed tym tokenem.Zapisz zmiany w pliku projektu i wróć do programu Visual Studio. Po wyświetleniu monitu załaduj ponownie projekt.
W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt języka Python, wybierz pythoni ponownie sprawdź polecenia w menu kontekstowym.
Teraz w menu znajduje się polecenie własne Uruchom plik startowy. Jeśli nie widzisz polecenia niestandardowego, upewnij się, że dodano wartość atrybutu
Name
dla elementu<Target>
do elementu<PythonCommands>
zgodnie z opisem w kroku 9. Zapoznaj się również z zagadnieniami wymienionymi w sekcji rozwiązywania problemów w dalszej części tego artykułu.Wybierz polecenie Uruchom plik startowy. Okno konsoli otwiera się i wyświetla tekst Hello polecenia niestandardowe, a następnie naciśnij dowolny klawisz, aby kontynuować. Potwierdź dane wyjściowe i zamknij okno konsoli.
Notatka
Skrypt polecenia niestandardowego uruchamia się w aktywowanym środowisku projektu Python.
Przejdź do edytora przy użyciu pliku projektu. W definicji elementu
(dodanej w kroku 8 zmień wartość atrybutu na . <CreatePythonCommandItem ... ExecuteIn="output"> ... </CreatePythonCommandItem>
Zapisz zmiany, wróć do programu Visual Studio i załaduj ponownie projekt.
Wybierz ponownie Uruchom niestandardowe polecenie pliku startowego z menu kontekstowego Python. Teraz dane wyjściowe programu są wyświetlane w oknie Dane wyjściowe programu Visual Studio
, a nie w oknie konsoli: Aby dodać więcej poleceń niestandardowych, wykonaj ten sam proces:
Zdefiniuj odpowiedni element
<Target>
dla polecenia niestandardowego w pliku projektu.Dodaj wartość atrybutu
Name
dla elementu<Target>
do grupy właściwości<PythonCommands>
.Zapisz zmiany w pliku projektu.
Załaduj ponownie projekt w programie Visual Studio.
Korzystanie z właściwości projektu
Aby odwołać się do właściwości projektu lub zmiennych środowiskowych w wartościach atrybutów elementu <Target>
, użyj nazwy właściwości w tokenie $()
, na przykład $(StartupFile)
i $(MSBuildProjectDirectory)
. Aby uzyskać więcej informacji, zobacz właściwości programu MSBuild.
Jeśli wywołasz polecenie, takie jak ($StartupFile)
używające właściwości projektu, takich jak właściwość StartupFile, a polecenie zakończy się niepowodzeniem, ponieważ token jest niezdefiniowany, program Visual Studio wyłącza polecenie do momentu ponownego załadowania projektu. Jeśli wprowadzisz zmiany w projekcie modyfikujące definicję właściwości, zmiany nie odświeżą stanu powiązanego polecenia. W takim przypadku nadal trzeba ponownie załadować projekt.
Zrozumienie struktury elementów <targetu>
Szczegóły polecenia niestandardowego można zdefiniować przy użyciu elementu <Target>
. Ogólna forma elementu <Target>
jest wyświetlana w poniższym pseudokodzie:
<Target Name="Name1" Label="Display Name" Returns="@(Commands)">
<CreatePythonCommandItem Target="filename, module name, or code"
TargetType="executable/script/module/code/pip"
Arguments="..."
ExecuteIn="console/consolepause/output/repl[:Display name]/none"
WorkingDirectory="..."
ErrorRegex="..."
WarningRegex="..."
RequiredPackages="...;..."
Environment="...">
<!-- Output always appears in this form, with these exact attributes -->
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Atrybuty docelowe
W poniższej tabeli wymieniono atrybuty elementu <Target>
.
Atrybut | Wymagane | Opis |
---|---|---|
Name |
Tak | Identyfikator polecenia w projekcie programu Visual Studio. Ta nazwa musi zostać dodana do grupy właściwości <PythonCommands> , aby polecenie było wyświetlane w menu kontekstowym Python. |
Label |
Tak | Nazwa wyświetlana interfejsu użytkownika, która pojawia się w menu kontekstowym Python. |
Returns |
Tak | Zwrócone informacje muszą zawierać token @(Commands) , który identyfikuje cel jako polecenie. |
Atrybuty „CreatePythonCommandItem”
Element <Target>
zawiera elementy <CreatePythonCommandItem>
i <Output>
, które definiują szczegółowe zachowanie polecenia niestandardowego. W poniższej tabeli wymieniono dostępne atrybuty elementu <CreatePythonCommandItem>
. Wszystkie wartości atrybutów są nieczułe na wielkość liter.
Attribute |
Wymagane | Opis |
---|---|---|
TargetType |
Tak | Określa, jaki atrybut Target zawiera i jak wartość jest używana wraz z atrybutem Arguments : - executable : uruchom plik wykonywalny o nazwie w atrybucie Target , dołączając wartość w atrybucie Arguments , tak jakby został wprowadzony bezpośrednio w wierszu polecenia. Wartość musi zawierać tylko nazwę programu bez argumentów. - script : uruchom polecenie python.exe z nazwą pliku w atrybucie Target , a następnie wartość w atrybucie Arguments . - module : uruchom polecenie python -m , a następnie nazwę modułu w atrybucie Target , a następnie wartość w atrybucie Arguments . - code : uruchom wbudowany kod zawarty w atrybucie Target . Ignoruj wartość atrybutu Arguments . - pip : Uruchom pip za pomocą polecenia w atrybucie Target , a następnie użyj wartości z atrybutu Arguments . Jeśli atrybut ExecuteIn jest ustawiony na output , pip zakłada, że żądanie ma uruchomić polecenie install i wykorzystuje atrybut Target jako nazwę pakietu. |
Target |
Tak | Określa nazwę pliku, nazwę modułu, kod lub polecenie do użycia, w zależności od wartości atrybutu TargetType . |
Arguments |
Fakultatywny | Udostępnia ciąg argumentów (jeśli istnieje) używany z atrybutem Target . - Gdy wartość atrybutu TargetType jest script , wartość Arguments jest przekazywana do programu Python, zamiast wartości python.exe polecenia. - Gdy wartość atrybutu TargetType jest code , wartość Arguments jest ignorowana. |
ExecuteIn |
Tak | Określa środowisko, w którym ma zostać uruchomione polecenie: - console : (Ustawienie domyślne) Uruchamia atrybut Target z wartością Arguments tak, jakby zostały wprowadzone bezpośrednio w wierszu polecenia. Gdy atrybut Target jest uruchomiony, zostanie wyświetlone okno polecenia i zostanie zamknięte automatycznie. - consolepause : Działa tak samo jak console , ale czeka na naciśnięcie klawisza przed zamknięciem okna. TargetType jest pip , program Visual Studio używa atrybutu Target jako nazwy pakietu i dołącza wartość atrybutu Arguments . - repl : uruchamia atrybut Target w oknie interaktywnym języka Python . Opcjonalna nazwa wyświetlana jest używana jako tytuł okna. - none : takie samo zachowanie jak console . |
WorkingDirectory |
Fakultatywny | Identyfikuje folder, w którym ma zostać uruchomione polecenie. |
ErrorRegex WarningRegEx |
Fakultatywny | Używane tylko wtedy, gdy atrybut ExecuteIn jest ustawiony na output . Obie wartości atrybutów określają wyrażenie regularne używane przez program Visual Studio do analizowania danych wyjściowych poleceń i pokazywania błędów i ostrzeżeń w oknie listy błędów |
RequiredPackages |
Fakultatywny | Zawiera listę wymagań dotyczących pakietu dla użycia polecenia przy użyciu tego samego formatu co plik requirements.txt (pip.readthedocs.io). Na przykład polecenie Run PyLint określa format pylint>=1.0.0 . Przed uruchomieniem polecenia program Visual Studio potwierdza, że wszystkie pakiety na liście są zainstalowane. Program Visual Studio używa pip do zainstalowania wszelkich brakujących pakietów. |
Environment |
Fakultatywny | Identyfikuje ciąg zmiennych środowiskowych do zdefiniowania przed uruchomieniem polecenia. Każda zmienna używa formatu \<NAME>=\<VALUE> , a wiele zmiennych oddziela się średnikami. Zmienna z wieloma wartościami musi być zawarta w cudzysłowie pojedynczym lub podwójnym, jak w 'NAME=VALUE1;VALUE2' . |
Nazwane grupy przechwytywania dla wyrażeń regularnych
Gdy program Visual Studio analizuje błędy i ostrzeżenia z niestandardowych danych wyjściowych poleceń, oczekuje, że wyrażenia regularne w wartościach atrybutów ErrorRegex
i WarningRegex
będą stosować następujące nazwane grupy:
-
(?<message>...)
: tekst błędu. -
(?<code>...)
: wartość kodu błędu. -
(?<filename>...)
: nazwa pliku, dla którego zgłaszany jest błąd. -
(?<line>...)
: numer wiersza lokalizacji w pliku, dla którego zgłaszany jest błąd. -
(?<column>...)
: numer kolumny lokalizacji w pliku, dla którego zgłaszany jest błąd.
Na przykład narzędzie PyLint generuje ostrzeżenia o następującej postaci:
************* Module hello
C: 1, 0: Missing module docstring (missing-docstring)
Aby umożliwić programowi Visual Studio wyodrębnianie odpowiednich informacji z tych ostrzeżeń i wyświetlanie ich w oknie listy błędów
^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]
Notatka
Składnia msg_id
w wartości atrybutu WarningRegex
powinna być rzeczywiście code
, zgodnie z opisem w kwestii 3680.
Importowanie poleceń niestandardowych z plikiem obiektów docelowych
Jeśli zdefiniujesz polecenia niestandardowe w pliku projektu języka Python, polecenia są dostępne tylko dla tego konkretnego projektu. Jeśli chcesz utworzyć polecenia niestandardowe i użyć ich w wielu projektach, możesz zdefiniować grupę właściwości <PythonCommands>
ze wszystkimi elementami <Target>
w pliku docelowym (.targets), a następnie zaimportować ten plik do projektów języka Python.
Plik targets używa tego samego formatu i składni, aby zdefiniować polecenia niestandardowe zgodnie z opisem dla pliku projektu języka Python (.pyproj). Typowe elementy do skonfigurowania obejmują
<PythonCommands>
,<Target>
,<CreatePythonCommandItem>
i<Output>
:<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <PythonCommands> $(PythonCommands); <!-- Additional command names --> </PythonCommands> </PropertyGroup> <Target Name="..." Label="..." Returns="@(Commands)"> <!-- CreatePythonCommandItem and Output elements... --> </Target> <!-- Any number of additional Target elements--> </Project>
Aby zaimportować plik docelowy do projektu, dodaj element
<Import Project="(path)">
w dowolnym miejscu w elemecie<Project>
w pliku projektu.Jeśli na przykład masz plik projektu o nazwie CustomCommands.targets w folderze obiektów docelowych w projekcie języka Python, dodaj następujący kod do pliku projektu:
<Import Project="targets/CustomCommands.targets"/>
Jeśli plik projektu importuje plik docelowy i wprowadzasz zmiany w pliku docelowym podczas otwierania projektu w programie Visual Studio, musisz skompilować rozwiązanie programu Visual Studio , które zawiera projekt, a nie tylko projekt.
Przykładowe polecenia
W poniższych sekcjach przedstawiono przykładowy kod, którego można użyć do definiowania poleceń niestandardowych dla projektów języka Python.
Uruchom PyLint (moduł docelowy)
Poniższy kod pojawia się w pliku Microsoft.PythonTools.targets:
<PropertyGroup>
<PythonCommands>$(PythonCommands);PythonRunPyLintCommand</PythonCommands>
<PyLintWarningRegex>
<![CDATA[^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]>
</PyLintWarningRegex>
</PropertyGroup>
<Target Name="PythonRunPyLintCommand"
Label="resource:Microsoft.PythonTools.Common;Microsoft.PythonTools.Common.Strings;RunPyLintLabel"
Returns="@(Commands)">
<CreatePythonCommandItem Target="pylint.lint"
TargetType="module"
Arguments=""--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]" -r n @(Compile, ' ')"
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="output"
RequiredPackages="pylint>=1.0.0"
WarningRegex="$(PyLintWarningRegex)">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Uruchom pip install z określonym pakietem (cel dla pip)
Następujące polecenie uruchamia polecenie <Target>
zawiera nazwę pakietu, a nie polecenie install
, które jest zakładane podczas używania definicji atrybutu ExecuteIn="output"
.
<PropertyGroup>
<PythonCommands>$(PythonCommands);InstallMyPackage</PythonCommands>
</PropertyGroup>
<Target Name="InstallMyPackage" Label="pip install my-package" Returns="@(Commands)">
<CreatePythonCommandItem Target="my-package" TargetType="pip" Arguments=""
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Pokaż nieaktualne pakiety pip (cel pip)
Następujące polecenie uruchamia program pip z funkcją list
w celu zidentyfikowania nieaktualnych pakietów pip:
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowOutdatedPackages</PythonCommands>
</PropertyGroup>
<Target Name="ShowOutdatedPackages" Label="Show outdated pip packages" Returns="@(Commands)">
<CreatePythonCommandItem Target="list" TargetType="pip" Arguments="-o --format columns"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="consolepause">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Uruchom plik wykonywalny z consolepause
Następujące polecenie uruchamia funkcję where
, aby wyświetlić lokalizację plików języka Python rozpoczynających się od folderu projektu:
<PropertyGroup>
<PythonCommands>$(PythonCommands);ShowAllPythonFilesInProject</PythonCommands>
</PropertyGroup>
<Target Name="ShowAllPythonFilesInProject" Label="Show Python files in project" Returns="@(Commands)">
<CreatePythonCommandItem Target="where" TargetType="executable" Arguments="/r . *.py"
WorkingDirectory="$(MSBuildProjectDirectory)" ExecuteIn="output">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
Uruchamianie serwera i uruchamianie poleceń serwera debugowania
Aby dowiedzieć się, jak zdefiniowano polecenia Start server i Start debug server dla projektów internetowych, zapoznaj się z repozytorium Microsoft.PythonTools.Web.targets w witrynie GitHub.
Instalowanie pakietu na potrzeby programowania
Następujący kod uruchamia pip, aby zainstalować pakiety:
<PropertyGroup>
<PythonCommands>PipInstallDevCommand;$(PythonCommands);</PythonCommands>
</PropertyGroup>
<Target Name="PipInstallDevCommand" Label="Install package for development" Returns="@(Commands)">
<CreatePythonCommandItem Target="pip" TargetType="module" Arguments="install --editable $(ProjectDir)"
WorkingDirectory="$(WorkingDirectory)" ExecuteIn="Repl:Install package for development">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
z fxthomas/Example.pyproj.xml (GitHub), używane za zgodą.
Generowanie Instalatora Windows
Następujący skrypt generuje instalator systemu Windows:
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWinInstCommand;</PythonCommands>
</PropertyGroup>
<Target Name="BdistWinInstCommand" Label="Generate Windows Installer" Returns="@(Commands)">
<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"
Arguments="bdist_wininst --user-access-control=force --title "$(InstallerTitle)" --dist-dir="$(DistributionOutputDir)""
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="setuptools"
ExecuteIn="Repl:Generate Windows Installer">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
z fxthomas/Example.pyproj.xml (GitHub), używane za zgodą.
Generowanie pakietu typu wheel dla języka Python
Poniższy skrypt generuje pakiet Python wheel:
<PropertyGroup>
<PythonCommands>$(PythonCommands);BdistWheelCommand;</PythonCommands>
</PropertyGroup>
<Target Name="BdistWheelCommand" Label="Generate Wheel Package" Returns="@(Commands)">
<CreatePythonCommandItem Target="$(ProjectDir)setup.py" TargetType="script"
Arguments="bdist_wheel --dist-dir="$(DistributionOutputDir)""
WorkingDirectory="$(WorkingDirectory)" RequiredPackages="wheel;setuptools"
ExecuteIn="Repl:Generate Wheel Package">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
z fxthomas/Example.pyproj.xml (GitHub), używane za zgodą.
Rozwiązywanie problemów z poleceniami niestandardowymi
Zapoznaj się z poniższymi sekcjami, aby zapoznać się z możliwymi problemami związanymi z pracą z poleceniami niestandardowymi.
Nie załadowano pliku projektu
Ten komunikat o błędzie wskazuje, że w pliku projektu występują błędy składni. Komunikat zawiera konkretny błąd z numerem wiersza i pozycją znaku.
Okno konsoli zostanie zamknięte po uruchomieniu polecenia
Jeśli okno konsoli zostanie zamknięte natychmiast po uruchomieniu polecenia, użyj definicji atrybutu ExecuteIn="consolepause"
zamiast ExecuteIn="console"
.
Brak polecenia z menu
Jeśli nie widzisz polecenia niestandardowego w menu kontekstowym Python, sprawdź następujące elementy:
- Upewnij się, że polecenie znajduje się w grupie właściwości
<PythonCommands>
. - Sprawdź, czy nazwa polecenia zdefiniowana na liście poleceń jest zgodna z nazwą określoną w elemecie
<Target>
.
Oto przykład. W poniższym fragmencie kodu XML nazwa Example
w grupie właściwości <PythonCommands>
nie jest zgodna z nazwą ExampleCommand
w definicji elementu <Target>
. Program Visual Studio nie znajduje polecenia o nazwie Example
, więc nie jest wyświetlane żadne polecenie. Użyj ExampleCommand
na liście poleceń lub zmień nazwę obiektu docelowego na tylko Example
.
<PropertyGroup>
<PythonCommands>$(PythonCommands);Example</PythonCommands>
</PropertyGroup>
<Target Name="ExampleCommand" Label="Example Command" Returns="@(Commands)">
<!-- ... -->
</Target>
Błąd podczas uruchamiania polecenia, nie można uzyskać celu polecenia
Ten komunikat o błędzie wskazuje, że zawartość elementów <Target>
lub <CreatePythonCommandItem>
jest niepoprawna.
Poniżej przedstawiono niektóre możliwe przyczyny tego błędu:
- Wymagany atrybut elementu
<Target>
jest pusty. - Wymagany atrybut
TargetType
jest pusty lub zawiera nierozpoznaną wartość. - Wymagany atrybut
ExecuteIn
jest pusty lub zawiera nierozpoznaną wartość. - Atrybut
ErrorRegex
lubWarningRegex
jest określony bez ustawiania definicji atrybutuExecuteIn="output"
. - Nierozpoznane atrybuty istnieją w elemecie . Na przykład odwołanie do atrybutu może być błędnie napisane jako
Argumnets
, a nieArguments
.
Wartości atrybutów mogą być puste, jeśli odwołujesz się do właściwości, która jest niezdefiniowana. Jeśli używasz tokenu $(StartupFile)
, ale w projekcie nie zdefiniowano pliku startowego, token zostanie rozpoznany jako pusty ciąg. W takich przypadkach możesz zdefiniować wartość domyślną. Na przykład polecenia Uruchom serwer i Uruchom serwer debugowania, zdefiniowane w szablonach projektów Bottle, Flask i Django, domyślnie używają pliku manage.py (jeśli plik startowy serwera nie jest określony we właściwościach projektu).
Program Visual Studio przestaje odpowiadać, ulega awarii
Jeśli program Visual Studio przestaje odpowiadać i ulega awarii po uruchomieniu polecenia niestandardowego, prawdopodobnie próbujesz uruchomić polecenie konsoli z definicją atrybutu ExecuteIn="output"
. W takich przypadkach program Visual Studio może ulec awarii, gdy próbuje przeanalizować dane wyjściowe. Aby uniknąć tego warunku, należy zamiast tego użyć definicji atrybutu ExecuteIn="console"
. Aby uzyskać więcej informacji, zobacz Kwestia 3681.
Polecenie nie jest rozpoznawane jako program operacyjny lub plik wsadowy
Po ustawieniu definicji atrybutu TargetType="executable"
wartość atrybutu Target
musi być tylko nazwę programu bez żadnych argumentów, takich jak python
lub tylko python.exe
. W takim przypadku przenieś wszystkie argumenty do atrybutu Arguments
.