Notatka
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 języku Python możesz przejść do okna poleceń, aby uruchamiać 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ć polecenia niestandardowe do menu projektu języka 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.
Wymagania 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. 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 języka Python zawiera dwa polecenia: Uruchom narzędzie PyLint i Uruchom narzędzie Mypy:
Niestandardowe polecenia Pythona, które zdefiniujesz, pojawią się w tym menu. Polecenie niestandardowe może odnosić się do pliku Python, modułu Python, kodu Python w linii, dowolnego pliku wykonywalnego lub polecenia pip. Możesz również określić, jak i gdzie uruchamiasz polecenie.
Polecenia niestandardowe można dodawać na kilka sposobów:
Zdefiniuj polecenia niestandardowe bezpośrednio w pliku projektu języka Python (pyproj). Te polecenia dotyczą tego konkretnego projektu.
Zdefiniuj polecenia niestandardowe w pliku docelowym (.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: Uruchom serwer i Uruchom serwer debugowania. 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. W podobny sposób, 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 języka Python i wybierz polecenie Zwolnij projekt.
Program Visual Studio zwalnia projekt i otwiera odpowiedni plik projektu języka Python (pyproj) w edytorze.
Jeśli plik projektu nie zostanie otwarty, ponownie kliknij prawym przyciskiem myszy projekt języka Python i wybierz polecenie 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 zwolniony projekt i wybierz polecenie 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 edytowania, zapisywania, ponownego ładowania i zwalniania może stać się uciążliwy podczas tworzenia komend 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, na przykład innej instancji programu Visual Studio, Visual Studio Code, Notatnika 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 Załaduj ponownie lub Załaduj wszystko ponownie, a program Visual Studio natychmiast zastosuje zmiany w pliku projektu do otwartego projektu.
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 przy użyciu polecenia python.exe, co odpowiada opcji Debuguj>Uruchom bez debugowania na głównym pasku narzędzi programu 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ę Python i zwróć uwagę na polecenia w menu kontekstowym. Obecnie jedynymi poleceniami w menu kontekstowym są Uruchom narzędzie PyLint i Uruchom narzędzie 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 języka Python, wybierz pozycję Python i sprawdź polecenia w menu kontekstowym.
W menu kontekstowym nadal są wyświetlane tylko polecenia Uruchom narzędzie PyLint i Uruchom narzędzie Mypy . Właśnie dodany kod do pliku projektu replikuje domyślną
<PythonCommands>grupę właściwości 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ą
<Target>definicję elementu w elemecie<Project>. Definicję<Target>można umieścić przed lub po definicji opisanej<PropertyGroup>wcześniej.Ten
<Target>element definiuje niestandardowe polecenie do uruchamiania pliku uruchamiania dla projektu (zidentyfikowanego przez właściwość StartupFile ) przy użyciupython.exepolecenia w oknie konsoli. DefinicjaExecuteIn="consolepause"atrybutu 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ę
<PythonCommands>właściwości (dodaną w kroku 5) następującym kodem XML. Ta składniaNamedefiniuje atrybut elementu<Target>, który dodaje polecenie niestandardowe do menu kontekstowego języka Python . Polecenie ma etykietę menu Uruchom plik startowy.<PythonCommands> $(PythonCommands); Example_RunStartupFile </PythonCommands>Wskazówka
Jeśli chcesz, aby niestandardowe polecenie było wyświetlane w menu kontekstowym przed domyślnymi poleceniami zdefiniowanymi w tokenie
$(PythonCommands), umieść składnię<Target>polecenia 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 pozycję Python i ponownie sprawdź polecenia w menu kontekstowym.
Teraz niestandardowe polecenie Uruchom plik startowy znajduje się w menu. Jeśli nie widzisz polecenia niestandardowego, upewnij się, że dodałeś wartość atrybutu
Namedla elementu<Target>do elementu<PythonCommands>zgodnie z opisem kroku 9. Zapoznaj się również z zagadnieniami wymienionymi w sekcji Rozwiązywanie problemów w dalszej części tego artykułu.Wybierz polecenie Uruchom plik startowy . Zostanie otwarte okno konsoli i zostanie wyświetlony tekst Witaj niestandardowe polecenia, a następnie naciśnij dowolny klawisz, aby kontynuować. Potwierdź dane wyjściowe i zamknij okno konsoli.
Uwaga / Notatka
Skrypt polecenia niestandardowego jest uruchamiany w aktywowanym środowisku dla projektu Python.
Przejdź do edytora przy użyciu pliku projektu. W definicji elementu (dodanej
<Target>w kroku 8) zmień wartość atrybutuExecuteInnaoutput.<CreatePythonCommandItem ... ExecuteIn="output"> ... </CreatePythonCommandItem>Zapisz zmiany, wróć do programu Visual Studio i załaduj ponownie projekt.
Ponownie wybierz polecenie niestandardowe Uruchom plik startowy z menu kontekstowego języka 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 niestandardowej komendy w pliku projektu.Dodaj wartość atrybutu
Namedla 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 $(), takim jak $(StartupFile) i $(MSBuildProjectDirectory). Aby uzyskać więcej informacji, zobacz właściwości programu MSBuild.
Jeśli wywołasz polecenie podobne ($StartupFile) do tego, które używa właściwości projektu, takich jak właściwość StartupFile , i 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.
Omówienie <struktury elementów docelowych>
Szczegóły polecenia niestandardowego można zdefiniować przy użyciu <Target> elementu . Ogólna forma <Target> elementu 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 dla elementu <Target>.
| Attribute | Wymagane | Description |
|---|---|---|
Name |
Tak | Identyfikator polecenia w projekcie programu Visual Studio. Ta nazwa musi zostać dodana do <PythonCommands> grupy właściwości, aby polecenie było wyświetlane w menu kontekstowym języka Python . |
Label |
Tak | Nazwa wyświetlana interfejsu użytkownika, która pojawia się w menu kontekstowym języka Python. |
Returns |
Tak | Zwrócone informacje muszą zawierać token @(Commands), który identyfikuje element docelowy jako polecenie. |
Atrybuty CreatePythonCommandItem
Element <Target> zawiera element <CreatePythonCommandItem> i <Output>, które definiują szczegółowe zachowanie polecenia niestandardowego. W poniższej tabeli wymieniono dostępne <CreatePythonCommandItem> atrybuty elementu. Wszystkie wartości atrybutów są niezależne od wielkości liter.
Attribute |
Wymagane | Description |
|---|---|---|
TargetType |
Tak | Określa, co Target zawiera atrybut i jak wartość jest używana wraz z atrybutem Arguments : - executable: Uruchom plik wykonywalny o nazwie podanej w atrybucie Target, dodając wartość z atrybutu 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 z wartością w atrybucie Arguments. - module: Aby uruchomić polecenie python -m, najpierw podaj 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: Uruchomić pip z komendą w atrybucie Target, a następnie wartość w atrybucie Arguments. Jeśli atrybut ExecuteIn jest ustawiony na output, pip zakłada, że żądanie ma uruchomić polecenie install i używa atrybutu Target jako nazwy 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 |
Opcjonalnie | Udostępnia ciąg argumentów (jeśli istnieje) do użycia z atrybutem Target . - Gdy wartość atrybutu TargetType to script, wartość Arguments jest dostarczana do programu Python, a nie do polecenia python.exe. - Gdy wartość atrybutu TargetType to code, Arguments wartość jest ignorowana. |
ExecuteIn |
Tak | Określa środowisko, w którym ma zostać uruchomione polecenie: - console: (Ustawienie domyślne) Uruchamia Target atrybut z wartością Arguments tak, jakby zostały wprowadzone bezpośrednio w wierszu polecenia.
Target Gdy atrybut jest uruchomiony, zostanie wyświetlone okno polecenia i zostanie zamknięte automatycznie. - consolepause: takie samo zachowanie jak console, ale czeka na naciśnięcie przed zamknięciem okna. - output: uruchamia Target atrybut i wyświetla wyniki w oknie Dane wyjściowe programu Visual Studio.
TargetType Jeśli atrybut to pip, program Visual Studio używa atrybutu Target jako nazwy pakietu i dołącza wartość atrybutuArguments. - repl: uruchamia Target atrybut w oknie interaktywnym języka Python. Opcjonalna nazwa wyświetlana jest używana jako tytuł okna. - none: takie samo zachowanie jak console. |
WorkingDirectory |
Opcjonalnie | Identyfikuje folder, w którym ma zostać uruchomione polecenie. |
ErrorRegex WarningRegEx |
Opcjonalnie | Używane tylko wtedy, gdy ExecuteIn atrybut 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 Lista błędów . Jeśli te atrybuty nie są określone, polecenie nie ma wpływu na okno Lista błędów . Aby uzyskać więcej informacji na temat wymagań programu Visual Studio, zobacz Nazwane grupy przechwytywania. |
RequiredPackages |
Opcjonalnie | Zawiera listę wymagań dotyczących pakietu dla 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. Visual Studio używa narzędzia pip, aby zainstalować brakujące pakiety. |
Environment |
Opcjonalnie | Identyfikuje ciąg zmiennych środowiskowych do zdefiniowania przed uruchomieniem polecenia. Każda zmienna używa formularza \<NAME>=\<VALUE> z wieloma zmiennymi oddzielonymi ś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 atrybutach ErrorRegex i WarningRegex będą używać następujących nazwanych grup:
-
(?<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 Lista błędów , WarningRegex wartość atrybutu dla polecenia Uruchom Pylint jest następująca:
^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]
Uwaga / Notatka
Składnia msg_id w wartości atrybutu WarningRegex powinna być faktycznie code, zgodnie z opisem w Problemu 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żywać ich w wielu projektach, możesz zdefiniować grupę <PythonCommands> właściwości ze wszystkimi <Target> elementami 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
<Import Project="(path)">element w dowolnym miejscu w<Project>pliku projektu.Jeśli na przykład masz plik projektu o nazwie CustomCommands.targets w folderze targets 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, gdy projekt jest otwarty w programie Visual Studio, musisz ponownie skompilowaćrozwiązanie programu Visual Studio zawierające 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 narzędzie PyLint (element docelowy modułu)
W pliku Microsoft.PythonTools.targets zostanie wyświetlony następujący kod:
<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>
Wykonaj pip install z określonym pakietem (cel)
Następujące polecenie uruchamia polecenie pip install my-package w oknie Wyjście programu Visual Studio. Podczas opracowywania pakietu i testowania jego instalacji możesz użyć polecenia takiego jak to. Element <Target> zawiera nazwę pakietu, a nie install polecenie, 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 pip z funkcją list, aby zidentyfikować nieaktualne pakiety:
<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>
Uruchamianie pliku wykonywalnego z wstrzymaniem konsoli
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 są zdefiniowane polecenia uruchamiania serwera i uruchamiania serwera debugowania 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 w celu zainstalowania pakietów:
<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 pliku fxthomas/Example.pyproj.xml (GitHub) używanego z uprawnieniami.
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 pliku fxthomas/Example.pyproj.xml (GitHub) używanego z uprawnieniami.
Tworzenie pakietu Wheel dla Pythona
Poniższy skrypt generuje pakiet w formacie wheel dla Pythona:
<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 pliku fxthomas/Example.pyproj.xml (GitHub) używanego z uprawnieniami.
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".
Polecenie nie jest dostępne w menu
Jeśli nie widzisz polecenia niestandardowego w menu kontekstowym języka Python , sprawdź następujące elementy:
- Upewnij się, że polecenie znajduje się w
<PythonCommands>grupie właściwości. - 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 polecenia 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 udało się uzyskać celu polecenia
Ten komunikat o błędzie wskazuje, że zawartość <Target> elementów lub <CreatePythonCommandItem> jest niepoprawna.
Poniżej przedstawiono niektóre możliwe przyczyny tego błędu:
- Wymagany
<Target>atrybut elementu jest pusty. - Wymagany
TargetTypeatrybut jest pusty lub zawiera nierozpoznaną wartość. - Wymagany
ExecuteInatrybut jest pusty lub zawiera nierozpoznaną wartość. - Atrybut
ErrorRegexorWarningRegexjest 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
ArgumnetszamiastArguments.
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 uruchamiania, 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 uruchamiania 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 Problem 3681.
Polecenie nie jest rozpoznawane jako program operacyjny lub plik wsadowy
Po ustawieniu definicji atrybutu wartość w atrybucie TargetType="executable"Target musi być tylko nazwą programu bez żadnych argumentów, takich jak python lub python.exe tylko. W takim przypadku przenieś wszystkie argumenty do atrybutu Arguments .