Egyéni parancsok definiálása Python-projektekhez a Visual Studióban

A Python-projektek fejlesztése során előfordulhat, hogy egy parancsablakra vált, hogy meghatározott szkripteket vagy modulokat futtasson, pip parancsokat futtasson, vagy más eszközöket használjon a kóddal. A munkafolyamat javítása érdekében egyéni parancsokat adhat hozzá a Python-projekt menüjéhez a Visual Studióban. Az egyéni Python-parancsok egy konzolablakban vagy a Visual Studio Kimeneti ablakában futtathatók. Normál kifejezések használatával arra is utasíthatja a Visual Studiót, hogyan elemezheti a parancs kimenetéből származó hibákat és figyelmeztetéseket.

Előfeltételek

A Visual Studio for Mac nem támogatott. A Visual Studio Code Windowson, Macen és Linuxon jól működik a Pythonnal az elérhető bővítményeken keresztül.

Egyéni parancsok felfedezése

A Python-projektmenü alapértelmezés szerint két parancsot tartalmaz, a PyLint ésa Run Mypy parancsot:

Képernyőkép a Visual Studio 2022 Python-projekt menüjének alapértelmezett parancsairól.

Az Ön által definiált egyéni Python-parancsok ugyanabban a menüben jelennek meg. Az egyéni parancsok hivatkozhatnak Python-fájlra, Python-modulra, beágyazott Python-kódra, tetszőleges végrehajtható fájlra vagy pip-parancsra. Megadhatja a parancs futtatásának módját és helyét is.

Egyéni parancsokat többféleképpen is hozzáadhat:

  • Egyéni parancsok definiálása egy Python-projektfájlban (.pyproj) közvetlenül. Ezek a parancsok az adott projektre vonatkoznak.

  • Egyéni parancsok definiálása egy célfájlban (.targets). A fájlban található parancsokat egyszerűen importálhatja, hogy több projekttel is használhassa őket.

  • Hozzon létre egy Python-projektet egy egyéni Python-parancsokat definiáló projektsablonból a Visual Studióban.

    Egyes Python-projektsablonok a Visual Studióban egyéni parancsokat adnak hozzá egy célfájl használatával. A Bottle Web Project és a Flask Web Project-sablonok két parancsot adnak hozzá, a Start servert és a Start hibakeresési kiszolgálót. A Django Web Project sablon hozzáadja ezeket a parancsokat és még sok mást:

Projekt újrabetöltése egyéni parancsok eléréséhez

Ha egy projekt meg van nyitva a Visual Studióban, ha módosítja a megfelelő projektfájlt egy szerkesztőben, újra kell betöltenie a projektet a módosítások alkalmazásához. Hasonló módon, miután egyéni Python-parancsokat definiált egy Python-projektfájlban, újra be kell töltenie a Python-projektet, hogy a parancsok megjelenjenek a Python-projekt menüjében. A célfájlban definiált egyéni parancsok módosításakor újra kell építenie a teljes Visual Studio-megoldást minden olyan projekthez, amely a célfájlt importálja.

Gyakori módszer a Python-projektfájl módosítása közvetlenül a Visual Studióban:

  1. Nyissa meg a Python-projektet a Visual Studióban. (Amikor megnyit egy projektet a Visual Studióban, a projekt alapértelmezés szerint betöltődik .)

  2. A Megoldáskezelőben kattintson a jobb gombbal a Python-projektre, és válassza a Projekt eltávolítása lehetőséget.

    A Visual Studio eltávolítja a projektet, és megnyitja a megfelelő Python-projektfájlt (.pyproj) a szerkesztőben.

    Ha a projektfájl nem nyílik meg, kattintson ismét a jobb gombbal a Python-projektre, és válassza a Projektfájl szerkesztése lehetőséget:

  3. Módosítsa a projektfájlt a Visual Studio szerkesztőjében, és mentse a munkáját.

  4. A Megoldáskezelőben kattintson a jobb gombbal a kiürített projektre, és válassza a Projekt betöltése lehetőséget. Ha a projektfájl módosításainak mentése nélkül próbálja újra betölteni a projektet, a Visual Studio megkéri, hogy végezze el a műveletet.

Az egyéni parancsok fejlesztése során a kiürítési-szerkesztési-mentési újrabetöltési folyamat unalmassá válhat. A hatékonyabb munkafolyamat magában foglalja a projekt egyidejű betöltését a Visual Studióban, és a Python-projektfájl külön szerkesztőben való megnyitását. Bármilyen szerkesztőt használhat, például a Visual Studio egy másik példányát, a Visual Studio Code-ot, a Jegyzettömbet stb. Miután mentette a módosításokat a szerkesztőben, és visszaállt a Visual Studióra, a Visual Studio észleli a megnyitott projekt projektfájljának módosításait, és felszólítja a művelet végrehajtására:

Képernyőkép a Visual Studio parancssorról, miután észleli a megnyitott projekt projektfájljának módosításait.

Válassza az Összes újratöltése vagy újratöltése lehetőséget, és a Visual Studio azonnal alkalmazza a projektfájl módosításait a megnyitott projektre.

Egyéni parancsok hozzáadása projektfájllal

Az alábbi eljárás bemutatja, hogyan hozhat létre egyéni parancsokat úgy, hogy hozzáadja a definíciót a Python-projektfájlban (.pyproj), és újra betölti a projektet a Visual Studióban. Az egyéni parancs közvetlenül futtatja egy projekt indítási fájlját a python.exe parancs használatával, amely alapvetően megegyezik a Visual Studio fő eszköztárának Indítás hibakeresés nélkül> lehetőségével.

  1. A Visual Studióban hozzon létre egy Python-CustomCommands nevű új Python-projektet a Python-alkalmazássablon használatával. Útmutatásért tekintse meg a rövid útmutatót: Python-projekt létrehozása sablonból.

    A Visual Studio létrehozza a Python-projektet, és betölti azt a munkamenetbe. A projektet a projektfájlon (.pyproj) keresztül konfigurálhatja. Ez a fájl csak akkor látható a Visual Studióban, ha a projekt meg van nyitva, de nincs eltávolítva. A projekt egy Python-fájllal (.py) is rendelkezik az alkalmazáskódhoz.

  2. Nyissa meg a Python_CustomCommands.py alkalmazásfájlt a szerkesztőben, és adja hozzá a következő kódot:

    print("Hello custom commands")
    
  3. A Megoldáskezelőben kattintson a jobb gombbal a Python-projektre, válassza a Pythont, és figyelje meg a helyi menü parancsát. Jelenleg a helyi menüben az egyetlen parancs a PyLint futtatása és a Mypy futtatása. Egyéni parancsok definiálásakor ezek is megjelennek ezen a menüben.

  4. Nyisson meg egy külön szerkesztőt a Visual Studio-munkameneten kívül, és nyissa meg a Python-projektfájlt (Python-CustomCommands.pyproj) a szerkesztőben. (Mindenképpen nyissa meg a projektfájlt (.pyproj), és ne a Python-alkalmazásfájlt (.py).)

  5. A projektfájlban keresse meg a záró </Project> elemet a fájl végén, és adja hozzá a következő XML-t közvetlenül a záró elem elé:

    <PropertyGroup>
      <PythonCommands>
        $(PythonCommands);
      </PythonCommands>
    </PropertyGroup>
    
  6. Mentse a projektfájl módosításait, és váltson vissza a Visual Studióba. A Visual Studio észleli a projektfájl módosításait, és cselekvésre kéri. A parancssorban válassza az Újratöltés lehetőséget, ha frissíteni szeretné a megnyitott projektet a projektfájl módosításaival.

  7. A Megoldáskezelőben kattintson a jobb gombbal a Python-projektre, válassza a Pythont, és ellenőrizze a helyi menü parancsát.

    A helyi menüben továbbra is csak a PyLint és a Run Mypy parancsok láthatók. A projektfájlhoz most hozzáadott kód egyszerűen replikálja a <PythonCommands> parancsot tartalmazó alapértelmezett tulajdonságcsoportot. A következő lépésben további kódot ad hozzá az egyéni parancshoz.

  8. Váltson arra a szerkesztőre, ahol frissíti a projektfájlt. Adja hozzá a következő <Target> elemdefiníciót az elemhez <Project> . A <Target> definíciót elhelyezheti a korábban ismertetett <PropertyGroup> definíció előtt vagy után.

    Ez az <Target> elem egy egyéni parancsot határoz meg a projekt indítási fájljának futtatásához (amelyet a StartupFile tulajdonság azonosít) a python.exe konzolablakban található paranccsal. Az attribútumdefiníció ExecuteIn="consolepause" egy olyan konzolt használ, amely megvárja, amíg kiválaszt egy kulcsot a konzolablak bezárásához.

    <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>
    
  9. Cserélje le a <PythonCommands> tulajdonságcsoportot (az 5. lépésben hozzáadott) a következő XML-fájlra. Ez a szintaxis határozza meg az Name<Target> elem attribútumát, amely hozzáadja az egyéni parancsot a Python helyi menüjéhez. A parancs az Indítási fájl futtatása menücímkével rendelkezik.

      <PythonCommands>
        $(PythonCommands);
        Example_RunStartupFile
      </PythonCommands>
    

    Jótanács

    Ha azt szeretné, hogy az egyéni parancs megjelenjen a helyi menüben a jogkivonatban $(PythonCommands) definiált alapértelmezett parancsok előtt, helyezze a <Target> parancs szintaxisát a jogkivonat elé.

  10. Mentse a projektfájl módosításait, és váltson vissza a Visual Studióba. A parancssorban töltse be újra a projektet.

  11. A Megoldáskezelőben kattintson a jobb gombbal a Python-projektre, válassza a Pythont, és ellenőrizze újra a helyi menü parancsát.

    Most az egyéni futtatás indítási fájl parancsa a menüben található. Ha nem látja az egyéni parancsot, győződjön meg arról, hogy hozzáadta az Name<Target> elem attribútumértékét az elemhez a <PythonCommands>9. lépésben leírtak szerint. Tekintse át a cikk későbbi , Hibaelhárítás szakaszában felsorolt szempontokat is.

  12. Válassza az Indítási fájl futtatása parancsot. Megnyílik egy konzolablak, és megjeleníti a Hello egyéni parancsok szövegét, majd nyomja le bármelyik billentyűt a folytatáshoz. Erősítse meg a kimenetet, és zárja be a konzolablakot.

    Megjegyzés:

    Az egyéni parancsszkript a Python-projekt aktivált környezetében fut.

  13. Váltson a szerkesztői nézetre a projektfájlt tartalmazó ablakkal. Az <Target> elem definíciójában (hozzáadva a 8. lépésben), módosítsa az ExecuteIn attribútum értékét a következőre: output.

      <CreatePythonCommandItem
        ...
        ExecuteIn="output">
        ...
      </CreatePythonCommandItem>
    
  14. Mentse a módosításokat, váltson vissza a Visual Studióba, és töltse be újra a projektet.

  15. Válassza újra az indítási fájl egyéni parancsát a Python helyi menüjéből. A program kimenete most nem konzolablak, hanem a Visual Studio Kimenet ablakában jelenik meg:

  16. További egyéni parancsok hozzáadásához kövesse ugyanezt a folyamatot:

    1. Adjon meg egy megfelelő <Target> elemet az egyéni parancshoz a projektfájlban.

    2. Adja hozzá az Name<Target> elem attribútumértékét a <PythonCommands> tulajdonságcsoporthoz.

    3. Mentse a módosításokat a projektfájlba.

    4. Töltse újra a projektet a Visual Studióban.

Projekttulajdonságok használata

Ha az elemattribútum-értékekben <Target> lévő projekttulajdonságokra vagy környezeti változókra szeretne hivatkozni, használja a tulajdonság nevét egy $() jogkivonaton belül, például $(StartupFile) és $(MSBuildProjectDirectory). További információért látogasson el a MSBuild tulajdonságokrészhez.

Ha olyan parancsot hív meg, amely ($StartupFile) olyan projekttulajdonságokat használ, mint a StartupFile tulajdonság, és a parancs meghiúsul, mert a jogkivonat nincs meghatározva, a Visual Studio letiltja a parancsot, amíg újra be nem tölti a projektet. Ha módosítja a tulajdonságdefiníciót módosító projektet, a módosítások nem frissítik a kapcsolódó parancs állapotát. Ebben az esetben újra kell töltenie a projektet.

A célelem< szerkezetének ismertetése >

Az elem használatával <Target> definiálhatja az egyéni parancsok részleteit. Az elem általános formája a <Target> következő pszeudokódban jelenik meg:

<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>

Célattribútumok

Az alábbi táblázat az <Target> elemattribútumokat sorolja fel.

Attribute Kötelező Description
Name Igen A Visual Studio-projekten belüli parancs azonosítója. Ezt a nevet hozzá kell adni a <PythonCommands> tulajdonságcsoporthoz ahhoz, hogy a parancs megjelenjen a Python helyi menüjében.
Label Igen A Python helyi menüjében megjelenő felhasználói felület megjelenítendő neve.
Returns Igen A visszaadott információknak tartalmazniuk kell a @(Commands) tokent, amely azt jelzi, hogy a cél parancs.

"CreatePythonCommandItem" attribútumok

Az <Target> elem tartalmaz <CreatePythonCommandItem> és <Output> tartalmaz elemeket, amelyek meghatározzák az egyéni parancs részletes viselkedését. Az alábbi táblázat az elérhető <CreatePythonCommandItem> elemattribútumokat sorolja fel. Az összes attribútumérték nem érzékeny a kis- és nagybetűkre.

Attribute Kötelező Description
TargetType Igen Megadja, hogy az Target attribútum mit tartalmaz, és hogyan használja az értéket az Arguments attribútummal együtt:
- executable: Futtassa az Target attribútumban elnevezett végrehajtható fájlt az attribútumban lévő Arguments érték hozzáfűzésével, mintha közvetlenül a parancssorban adták volna meg. Az érték csak argumentumok nélküli programnevet tartalmazhat.
- script: Futtassa a python.exe parancsot az Target attribútum fájlnevével, majd kövesse a Arguments attribútum értékét.
- module: Futtassa a python -m parancsot, majd adja meg a modul nevét az Target attribútumban, és az értéket a Arguments attribútumban.
- code: Futtassa az attribútumban Target található beágyazott kódot. Hagyja figyelmen kívül az Arguments attribútum értékét.
- pip: Futtassa a pipet az Target attribútumban lévő paranccsal, majd a Arguments attribútumban lévő értékkel. Ha az ExecuteIn attribútum be van állítva output, a pip feltételezi, hogy a kérés a install parancs futtatása, és az Target attribútumot használja csomagnévként.
Target Igen Megadja a használni kívánt fájlnevet, modulnevet, kódot vagy pip parancsot az attribútum értékétől TargetType függően.
Arguments Opcionális A Target attribútummal használható argumentumok karaktersorozata (ha van ilyen).
- Ha az TargetType attribútum értéke script, akkor a Arguments érték a Python-programnak lesz megadva a python.exe parancs helyett.
Ha az TargetType attribútum értéke code, figyelmen kívül hagyják az Arguments értéket.
ExecuteIn Igen Azt a környezetet adja meg, amelyben futtatni szeretné a parancsot:
- console: (Alapértelmezett) Úgy futtatja az Target attribútumot az Arguments értékkel, mintha közvetlenül a parancssorba lennének beírva. Amíg az Target attribútum fut, megjelenik egy parancsablak, és automatikusan bezáródik.
- consolepause: Ugyanaz a viselkedés, mint console, de az ablak bezárása előtt vár egy billentyűleütésre.
- output: Futtatja az Target attribútumot, és megjeleníti az eredményeket a Visual Studio Output ablakában. Ha az TargetType attribútum az pip, a Visual Studio az Target attribútumot használja csomagnévként, és hozzáfűzi az Arguments attribútum értékét.
- repl: Az attribútumot a TargetPython Interaktív ablakban futtatja. Az ablak címéhez az opcionális megjelenítendő név használatos.
- none: Ugyanaz a viselkedés, mint a console.
WorkingDirectory Opcionális A parancs futtatásához használt mappát azonosítja.
ErrorRegex
WarningRegEx
Opcionális Csak akkor használatos, ha az ExecuteIn attribútum értéke output. Mindkét attribútumérték egy reguláris kifejezést ad meg, amelyet a Visual Studio használ a parancs kimenetének elemzéséhez, valamint a hibák és figyelmeztetések megjelenítéséhez a Hibalista ablakban. Ha ezek az attribútumok nincsenek megadva, a parancs nem érinti a Hibalista ablakot. A Visual Studio elvárásairól további információt a named capture groups (Elnevezett rögzítési csoportok) című témakörben talál.
RequiredPackages Opcionális A parancs csomagkövetelményeinek listáját a requirements.txt fájl (pip.readthedocs.io) formátumával adja meg. A PyLint futtatása parancs például a formátumot pylint>=1.0.0adja meg. A parancs futtatása előtt a Visual Studio megerősíti, hogy a listában szereplő összes csomag telepítve van. A Visual Studio pip használatával telepíti a hiányzó csomagokat.
Environment Opcionális Azok a környezeti változók, amelyeket definiálni kell a parancs futtatása előtt. Minden változó a \<NAME>=\<VALUE> formátumot használja, és több változót pontosvesszővel választanak el. A több értékkel rendelkező változókat egy vagy két idézőjelben kell tárolni, ahogyan a .'NAME=VALUE1;VALUE2'

Elnevezett rögzítési csoportok reguláris kifejezésekhez

Amikor a Visual Studio elemzi az egyéni parancskimenet hibáit és figyelmeztetéseit, elvárja, hogy a reguláris kifejezések és ErrorRegex attribútumértékek WarningRegex a következő elnevezett csoportokat használják:

  • (?<message>...): A hiba szövege.
  • (?<code>...): Hibakód értéke.
  • (?<filename>...): Annak a fájlnak a neve, amelyhez a hibát jelentik.
  • (?<line>...): Annak a fájlnak a sorszáma, amelynél a hiba jelentve van.
  • (?<column>...): A fájl azon helyének oszlopszáma, amelyhez a hibát jelentik.

A PyLint például a következő formátumú figyelmeztetéseket állítja elő:

************* Module hello
C:  1, 0: Missing module docstring (missing-docstring)

Annak érdekében, hogy a Visual Studio kinyerje a helyes információkat ezekből a figyelmeztetésekből, és megjelenítse őket a Hibalista ablakban, a WarningRegex attribútumérték a Pylint futtatása parancshoz a következő:

^(?<filename>.+?)\((?<line>\d+),(?<column>\d+)\): warning (?<msg_id>.+?): (?<message>.+?)$]]

Megjegyzés:

A msg_id attribútumérték szintaxisa valójában WarningRegex kellene, hogy legyen, ahogyan azt a code leírja.

Egyéni parancsok importálása célfájllal

Ha egyéni parancsokat definiál egy Python-projektfájlban, a parancsok csak az adott projekt számára érhetők el. Ha egyéni parancsokat szeretne létrehozni, és több projektben szeretné használni őket, definiálhatja a <PythonCommands> tulajdonságcsoportot egy célfájl (<Target>) összes elemével, majd importálhatja a fájlt a Python-projektekbe.

  • A célfájl ugyanazt a formátumot és szintaxist használja az egyéni parancsok definiálásához a Python-projektfájlhoz (.pyproj) leírtak szerint. A konfigurálni kívánt gyakori elemek közé tartoznak <PythonCommands>a következők<Target><CreatePythonCommandItem><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>
    
  • Ha célfájlt szeretne importálni a projektbe, vegyen fel egy <Import Project="(path)"> elemet a <Project> projektfájl elemébe.

    Ha például egy CustomCommands.targets nevű projektfájllal rendelkezik a Python-projekt egyik célmappájában , adja hozzá a következő kódot a projektfájlhoz:

    <Import Project="targets/CustomCommands.targets"/>
    
  • Ha a projektfájl importál egy célfájlt, és módosítja a célfájlt, miközben a projekt meg van nyitva a Visual Studióban, újra kell építenie a projektet tartalmazó Visual Studio-megoldást , és nem csak a projektet.

Példaparancsok

Az alábbi szakaszokban példakódot talál, amellyel egyéni parancsokat határozhat meg a Python-projektekhez.

PyLint futtatása (modulcél)

A Következő kód jelenik meg a Microsoft.PythonTools.targets fájlban:

<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="&quot;--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]&quot; -r n @(Compile, ' ')"
                           WorkingDirectory="$(MSBuildProjectDirectory)"
                           ExecuteIn="output"
                           RequiredPackages="pylint&gt;=1.0.0"
                           WarningRegex="$(PyLintWarningRegex)">
    <Output TaskParameter="Command" ItemName="Commands" />
  </CreatePythonCommandItem>
</Target>

Pip telepítésének futtatása adott csomaggal (pip cél)

A következő parancs futtatja a pip install my-package parancsot a Visual Studio Output ablakában. A csomag fejlesztésekor és a telepítés tesztelésekor használhat ilyen parancsokat. Az <Target> elem a install csomag nevét tartalmazza, nem pedig a parancsot, amit akkor feltételezünk, ha az ExecuteIn="output" attribútumdefiníciót használjuk.

<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>

Elavult pipcsomagok megjelenítése (pip cél)

A következő parancs a list függvénnyel futtatja a pipet az elavult pipcsomagok azonosításához:

<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>

Futtatható fájl futtatása consolepause-szal

A következő parancs futtatja a függvényt where a Python-fájlok helyének megjelenítéséhez a projektmappából kiindulva:

<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>

Kiszolgáló futtatása és hibakeresési kiszolgálóparancsok futtatása

A Start Server és a Start hibakeresési kiszolgálói parancsok webes projektekhez való definiálásához tekintse meg a Microsoft.PythonTools.Web.targets adattárat a GitHubon.

Csomag telepítése fejlesztéshez

A következő kód futtatja a pipet a csomagok telepítéséhez:

<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>

Az fxthomas/Example.pyproj.xml (GitHub), engedélyekkel használva.

Windows-telepítő létrehozása

A következő szkript létrehoz egy Windows-telepítőt:

<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 &quot;$(InstallerTitle)&quot; --dist-dir=&quot;$(DistributionOutputDir)&quot;"
        WorkingDirectory="$(WorkingDirectory)" RequiredPackages="setuptools"
        ExecuteIn="Repl:Generate Windows Installer">
      <Output TaskParameter="Command" ItemName="Commands" />
    </CreatePythonCommandItem>
  </Target>

Az fxthomas/Example.pyproj.xml (GitHub), engedélyekkel használva.

Python-kerékcsomag létrehozása

A következő szkript létrehoz egy Python-kerékcsomagot :

<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=&quot;$(DistributionOutputDir)&quot;"
      WorkingDirectory="$(WorkingDirectory)" RequiredPackages="wheel;setuptools"
      ExecuteIn="Repl:Generate Wheel Package">
    <Output TaskParameter="Command" ItemName="Commands" />
  </CreatePythonCommandItem>
</Target>

Az fxthomas/Example.pyproj.xml (GitHub), engedélyekkel használva.

Egyéni parancsok hibaelhárítása

Tekintse át a következő szakaszokat az egyéni parancsok használatával kapcsolatos lehetséges problémákért.

A projektfájl nincs betöltve

Ez a hibaüzenet azt jelzi, hogy szintaxishibák vannak a projektfájlban. Az üzenet tartalmazza az adott hibát egy sorszámmal és karakterhelyzettel.

A konzolablak a parancsfuttatások után bezárul

Ha a konzolablak közvetlenül a parancs futtatása után bezárul, használja az attribútumdefiníciót ahelyettExecuteIn="consolepause", hogy .ExecuteIn="console"

A menüből hiányzó parancs

Ha nem látja az egyéni parancsot a Python helyi menüjében, ellenőrizze a következő elemeket:

  • Ellenőrizze, hogy a parancs szerepel-e a <PythonCommands> tulajdonságcsoportban.
  • Ellenőrizze, hogy a parancslista által definiált parancsnév megegyezik-e az <Target> elemben megadott névvel.

Íme egy példa. A következő XML-kódrészletben a Example<PythonCommands> tulajdonságcsoport neve nem egyezik meg az ExampleCommand<Target> elemdefinícióban szereplő névvel. A Visual Studio nem talál egy elnevezett Exampleparancsot, ezért nem jelenik meg parancs. Használja ExampleCommand a parancslistában, vagy módosítsa a cél nevét úgy, hogy csak Exampleaz legyen.

  <PropertyGroup>
    <PythonCommands>$(PythonCommands);Example</PythonCommands>
  </PropertyGroup>
  <Target Name="ExampleCommand" Label="Example Command" Returns="@(Commands)">
    <!-- ... -->
  </Target>

Hiba a parancs futtatása közben, nem sikerült lekérni a parancscélt

Ez a hibaüzenet azt jelzi, hogy a <Target> vagy <CreatePythonCommandItem> elemek tartalma helytelen.

A hiba lehetséges okai az alábbiak:

  • A szükséges <Target> elemattribútum üres.
  • A szükséges TargetType attribútum üres, vagy ismeretlen értéket tartalmaz.
  • A szükséges ExecuteIn attribútum üres, vagy ismeretlen értéket tartalmaz.
  • Az ErrorRegex vagy WarningRegex az attribútum az ExecuteIn="output" attribútumdefiníció beállítása nélkül van megadva.
  • Ismeretlen attribútumok léteznek az elemben. Előfordulhat például, hogy az attribútumhivatkozás nem a következőképpen van elírva ArgumnetsArguments.

Az attribútumértékek üresek lehetnek, ha nem definiált tulajdonságra hivatkozik. Ha a tokent $(StartupFile) használja, de nincs megadva indítási fájl a projektben, a token egy üres sztringre lesz feloldva. Ilyen esetekben érdemes lehet egy alapértelmezett értéket megadni. A Bottle, Flask és Django projektsablonokban definiált Futtató kiszolgáló és Hibakeresési kiszolgáló parancsok például alapértelmezés szerint a manage.py fájlt használják (ha a projekt tulajdonságai nem határozzák meg a kiszolgáló indítási fájlját).

A Visual Studio nem válaszol, összeomlik

Ha a Visual Studio nem válaszol és összeomlik az egyéni parancs futtatásakor, valószínűleg egy attribútumdefinícióval rendelkező ExecuteIn="output" konzolparancsot próbál futtatni. Ilyen esetekben előfordulhat, hogy a Visual Studio összeomlik, amikor megpróbálja elemezni a kimenetet. A feltétel elkerülése érdekében használja inkább az ExecuteIn="console" attribútumdefiníciót. További információ: 3681.

A parancs nem ismerhető fel operatív programként vagy kötegelt fájlként

Az attribútumdefiníció beállításakor TargetType="executable" az attribútum értéke Targetcsak a program neve lehet argumentumok nélkül, például python vagy python.exe csak. Ebben az esetben helyezze át az argumentumokat az Arguments attribútumba.