Megosztás a következőn keresztül:


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 projektmenüjéhez a Visual Studióban. Az egyéni Python-parancsok egy konzolablakban vagy a Visual Studio Kimeneti ablakban 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. További információért lásd: Mi történik a Visual Studio Mac esetében? A Visual Studio Code Windows, Mac és Linux rendszeren jól működik a Pythonnal az elérhető bővítmények segítségével.

Egyéni parancsok felfedezése

Alapértelmezés szerint a Python projektmenü két parancsot tartalmaz, a PyLint- futtatása és a Mypy futtatása:

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

Képernyőkép, amelyen a Visual Studio Python-projekt menüjének alapértelmezett parancsai láthatók.

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 kiszolgáló indítása és a hibakeresési kiszolgáló indítása. 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őterületen kattintson a jobb gombbal a Python-projektre, és válassza a Projekt eltávolításalehető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 Projektfájl szerkesztése:

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

  4. A Megoldáskezelőbenkattintson a jobb gombbal a kiürített projektre, és válassza Projectújratö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, amely a Visual Studio kérését jeleníti meg, miután észleli egy megnyitott projekt projektfájljának módosításait.

Válassza a Újratöltés vagy a Mindent újratölt 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 parancsot ú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 a python.exe paranccsal futtatja egy projekt indítási fájlját, amely lényegében ugyanaz, mint a Hibakeresési>Indítás hibakeresés nélkül lehetőség használata a Visual Studio fő eszköztárán.

  1. A Visual Studióban hozzon létre egy új Python-projektet Python-CustomCommands néven a Python-alkalmazás sablon használatával. Útmutatásért lásd 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 Studio-ban, ha a projekt meg van nyitva, de nincs betöltve. 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őkattintson a jobb gombbal a Python-projektre, válassza Python-lehetőséget, és figyelje meg a helyi menü parancsát. Jelenleg a helyi menüben csak a PyLint futtatása és a Mypy futtatása parancsok érhetők el. 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őtt:

    <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 a Újratöltés lehetőséget, hogy frissítse a megnyitott projektet a projektfájl módosításaival.

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

    A helyi menüben továbbra is csak a PyLint futtatása és a Mypy futtatása parancsok láthatóak. A projektfájlhoz most hozzáadott kód egyszerűen replikálja a PyLint parancsot tartalmazó alapértelmezett <PythonCommands> 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á az alábbi <Target> elemdefiníciót a <Project> elemhez. A <Target> definíciót a korábban ismertetett <PropertyGroup> definíció előtt vagy után helyezheti el.

    Ez a <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 konzolablakban található python.exe 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 (hozzáadva a 5. lépés-ban) a következő XML-re. Ez a szintaxis határozza meg a <Target> elem Name attribútumát, amely hozzáadja az egyéni parancsot a Python helyi menüjéhez. A parancs menücímkéje Indítási fájl futtatása.

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

    Borravaló

    Ha azt szeretné, hogy az egyéni parancs megjelenjen a helyi menüben a $(PythonCommands) jogkivonatban definiált alapértelmezett parancsok előtt, helyezze a parancs <Target> 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őkattintson a jobb gombbal a Python-projektre, válassza Python-lehetőséget, és ellenőrizze újra a helyi menü parancsát.

    Most az egyéni Indítási fájl futtatása parancs elérhető a menüben. Ha nem látja az egyéni parancsot, ellenőrizze, hogy hozzáadta-e a <Target> elem Name attribútumértékét a <PythonCommands> elemhez a 9. . lépésben leírtak szerint. Tekintse át a cikk későbbi, hibaelhárítási szakaszában felsorolt szempontokat is.

  12. Válassza az Indítási fájl futtatása parancsot. Egy konzolablak megnyílik, és megjeleníti a szöveget: Hello egyéni parancsok, majd következik: Nyomjon le egy billentyűt a folytatáshoz. Erősítse meg a kimenetet, és zárja be a konzolablakot.

    Jegyzet

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

  13. Váltson arra a szerkesztőre, amelyik tartalmazza a projektfájlt. A <Target> elemdefinícióban (8. lépésben) módosítsa a ExecuteIn attribútum értékét outputértékre.

      <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 ki újra az Indítási fájl futtatása parancsot az Python helyi menü egyéni parancsai közül. Most a program kimenete a Visual Studio Kimeneti ablakban jelenik meg konzolablak helyett:

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

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

    2. Adja hozzá a <Target> elem Name 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 <Target> elemattribútum értékeiben lévő projekttulajdonságokra vagy környezeti változókra szeretne hivatkozni, használja a tulajdonságnevet 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, mint a ($StartupFile), amely 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 továbbra is újra kell betöltenie a projektet.

<Cél> elemstruktúra ismertetése

Az egyéni parancsok részleteit a <Target> elem használatával határozhatja meg. A <Target> elem általános formája a 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.

Attribútum Szükséges Leírás
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) jogkivonatot, amely a célt parancsként azonosítja.

CreatePythonCommandItem attribútumok

A <Target> elem <CreatePythonCommandItem> és <Output> elemeket tartalmaz, 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. Minden attribútumérték kis- és nagybetűkre érzéketlen.

Attribute Szükséges Leírás
TargetType Igen Meghatározza a Target attribútumot, valamint az érték használatát a Arguments attribútummal együtt:
- executable: Futtassa a Target attribútumban elnevezett végrehajtható fájlt, hozzáfűzve az értéket a Arguments attribútumban, mintha közvetlenül a parancssorba volna beírva. Az érték csak argumentumok nélküli programnevet tartalmazhat.
- script: Futtassa a python.exe parancsot a fájlnévvel a Target attribútumban, majd az értékkel a Arguments attribútumban.
- module: Futtassa a python -m parancsot, majd a modul nevét a Target attribútumban, majd a Arguments attribútum értékét.
- code: Futtassa a Target attribútumban található beágyazott kódot. Hagyja figyelmen kívül a Arguments attribútum értékét.
- pip: Futtassa a pipet a Target attribútumban lévő paranccsal, majd a Arguments attribútumban lévő értékkel. Ha a ExecuteIn attribútum outputvan beállítva, a pip feltételezi, hogy a kérés az install parancs futtatása, és a 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 a TargetType attribútum értékétől függően.
Arguments Szabadon választható A Target attribútummal használandó argumentumok sorozata (ha van ilyen).
- Ha a TargetType attribútum értéke script, a Arguments érték a Python-programnak lesz megadva a python.exe parancs helyett.
- Ha a TargetType attribútum értéke code, a Arguments érték figyelmen kívül lesz hagyva.
ExecuteIn Igen Azt a környezetet adja meg, amelyben futtatni szeretné a parancsot:
- console: (Alapértelmezett) A Target attribútumot a Arguments értékkel úgy futtatja, mintha közvetlenül a parancssorba lennének beírva. Amíg a 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 egy billentyű lenyomása után várakozik.
- output: Futtatja a Target attribútumot, és megjeleníti az eredményeket a Visual Studio Kimeneti ablakban. Ha a TargetType attribútum pip, a Visual Studio a Target attribútumot használja csomagnévként, és hozzáfűzi a Arguments attribútum értékét.
- repl: A Target attribútum futtatása a Python Interaktív Ablak-ban. Az ablak címéhez az opcionális megjelenítendő név használatos.
- none: Ugyanaz a viselkedés, mint console.
WorkingDirectory Szabadon választható A parancs futtatásához használt mappát azonosítja.
ErrorRegex
WarningRegEx
Szabadon választható Csak akkor használatos, ha a ExecuteIn attribútum outputértékre van állítva. Mindkét attribútumérték egy reguláris kifejezést ad meg, amelyet a Visual Studio használ a parancskimenet elemzéséhez, valamint a hibalista ablakban megjelenő hibák és figyelmeztetések megjelenítéséhez. Ha ezek az attribútumok nincsenek megadva, a parancs nem befolyásolja a hibalista ablakát. További információ a Visual Studio elvárásairól: Elnevezett rögzítési csoportok.
RequiredPackages Szabadon választható A parancs csomagkövetelményeinek listáját a requirements.txt fájllal (pip.readthedocs.io) megegyező formátumban adja meg. Például a PyLint futtatása parancs adja meg a formátumot pylint>=1.0.0. 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 Szabadon választható A parancs futtatása előtt definiálandó környezeti változók egy listája. Minden változó a \<NAME>=\<VALUE> formátumot használja, és a több változót pontosvessző választja el. A több értékkel rendelkező változókat egy vagy két idézőjelben kell tárolni, ahogyan az '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, a ErrorRegex és WarningRegex attribútumértékek normál kifejezéseit várja el a következő elnevezett csoportok használatához:

  • (?<message>...): A hiba szövege.
  • (?<code>...): Hibakódérték.
  • (?<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, amelynél a hiba jelentve van.

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)

Ha lehetővé szeretné tenni, hogy a Visual Studio kinyerje a megfelelő információkat ezekből a figyelmeztetésekből, és megjelenítse őket a Hibalista ablakban, a Run Pylint parancs WarningRegex attribútumértéke a következő:

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

Jegyzet

Valójában a WarningRegex attribútumérték msg_id szintaxisa codekell legyen, ahogyan azt a 3680-as számú problémában leírták.

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 a célfájl összes <Target> elemével (.targets), majd importálhatja a fájlt a Python-projektekbe.

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

    Ha például CustomCommands.targets nevű projektfájllal rendelkezik egy - Python-projektbeli mappá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ás, é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 (modul célpont)

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>

A `pip install` parancs futtatása adott csomaggal (pip cél)

Az alábbi parancs futtatja a pip install my-package parancsot a Visual Studio Kimeneti ablakban. A csomag fejlesztésekor és a telepítés tesztelésekor használhat ilyen parancsokat. A <Target> elem a csomag nevét tartalmazza a install parancs helyett, amelyet a ExecuteIn="output" attribútumdefiníció használatakor feltételezünk.

<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 pip csomagok megjelenítése (pip célpont)

Az alábbi parancs futtatja a pip parancsot az list függvénnyel az elavult pip csomagok azonosítására.

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

Hajts végre futtathatót a consolepause használatával

A következő parancs a where függvényt futtatja 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 webprojektekhez tartozó Start kiszolgáló és Start hibakeresési kiszolgáló parancsok meghatározásának megismeréséhez vizsgálja meg a GitHubon található Microsoft.PythonTools.Web.targets adattárat.

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>

Engedélyekkel használt fxthomas/Example.pyproj.xml (GitHub).

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>

Engedélyekkel használt fxthomas/Example.pyproj.xml (GitHub).

Python-kerékcsomag létrehozása

A következő szkript létrehoz egy Python-kerekes csomagot:

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

Engedélyekkel használt fxthomas/Example.pyproj.xml (GitHub).

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 a ExecuteIn="consolepause" attribútumdefiníciót a ExecuteIn="console"helyett.

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 a <Target> elemben megadott névvel.

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

  <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.
  • A ErrorRegex vagy WarningRegex attribútum a 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 Arguments-ként, hanem Argumnets-ként íródik.

Az attribútumértékek üresek lehetnek, ha nem definiált tulajdonságra hivatkozik. Ha a $(StartupFile) tokent használja, de nincs megadva indítási fájl a projektben, a token üres karakterláncra oldódik fel. Ilyen esetekben érdemes lehet egy alapértelmezett értéket megadni. Például a Szerver futtatása és a Hibakeresési szerver futtatása parancsokat a Bottle, Flask és Django projektsablonok definiálják, amelyek alapértelmezés szerint a manage.py fájlt használják (ha a projekttulajdonságokban nincs megadva kiszolgálóindító fájl).

A Visual Studio nem válaszol, összeomlik

Ha a Visual Studio nem válaszol, és az egyéni parancs futtatásakor összeomlik, valószínűleg egy konzolparancsot próbál futtatni ExecuteIn="output" attribútumdefinícióval. 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 a ExecuteIn="console" attribútumdefiníciót. További információért lásd a 3681-es számú ügyet.

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

A TargetType="executable" attribútumdefiníció beállításakor a Target attribútum értékének csak a programnév kell lennie, argumentumok nélkül, például python vagy csak python.exe. Ebben az esetben helyezze át az argumentumokat a Arguments attribútumba.