Aracılığıyla paylaş


Visual Studio'da Python projeleri için özel komutlar tanımlama

Python projelerinizi geliştirirken belirli betikleri veya modülleri çalıştırmak, pip komutlarını çalıştırmak veya kodunuzla diğer araçları kullanmak için bir komut penceresine geçtiğinizi fark edebilirsiniz. İş akışınızı geliştirmek için Visual Studio'daki Python proje menüsüne özel komutlar ekleyebilirsiniz. Özel Python komutları bir konsol penceresinde veya Visual Studio Çıkış penceresinde çalıştırılabilir. Visual Studio'ya komut çıkışındaki hataları ve uyarıları nasıl ayrıştırabileceğinizi bildirmek için normal ifadeleri de kullanabilirsiniz.

Önkoşullar

Mac için Visual Studio desteklenmez. Windows, Mac ve Linux üzerinde Visual Studio Code, kullanılabilir uzantılar aracılığıyla Python ile iyi çalışır.

Özel komutları keşfetme

Varsayılan olarak , Python proje menüsünde PyLint'i Çalıştır ve Mypy'yi Çalıştır adlı iki komut bulunur:

Visual Studio 2022'de Python projesi menüsündeki varsayılan komutları gösteren ekran görüntüsü.

Tanımladığınız tüm özel Python komutları aynı menüde görünür. Özel komut bir Python dosyasına, Python modülüne, satır içi Python koduna, rastgele yürütülebilir dosyaya veya pip komutuna başvurabilir. Komutun nasıl ve nerede çalıştırılacağını da belirtebilirsiniz.

Özel komutları çeşitli yollarla ekleyebilirsiniz:

  • Doğrudan bir Python proje dosyasında (.pyproj) özel komutlar tanımlayın. Bu komutlar söz konusu projeye uygulanır.

  • Bir hedefler dosyasında (.targets) özel komutlar tanımlayın. Bu dosyadaki komutları birden çok projeyle kullanmak için kolayca içeri aktarabilirsiniz.

  • Visual Studio'da özel Python komutlarını tanımlayan bir proje şablonundan Python projesi oluşturun.

    Visual Studio'daki bazı Python proje şablonları, bir targets dosyası kullanarak özel komutlar ekler. Bottle Web Project ve Flask Web Project şablonları iki komut ekler: Sunucuyu başlat ve Hata ayıklama sunucusunu başlat. Django Web Projesi şablonu şu komutları ve daha birçok komutu ekler:

Özel komutlara erişmek için projeyi yeniden yükleme

Visual Studio'da bir proje açıkken, düzenleyicide ilgili proje dosyasında değişiklik yaparsanız, değişiklikleri uygulamak için projeyi yeniden yüklemeniz gerekir. Benzer şekilde, bir Python proje dosyasında özel Python komutları tanımladıktan sonra, komutların Python proje menüsünde görünmesi için Python projesini yeniden yüklemeniz gerekir. Bir hedefler dosyasında tanımlanan özel komutları değiştirdiğinizde, dosyayı içeri aktaran tüm projelerde visual studio çözümünün tamamını yeniden oluşturmanız gerekir.

Yaygın bir yaklaşım, Python proje dosyasındaki değişiklikleri doğrudan Visual Studio'da yapmaktır:

  1. Python projenizi Visual Studio'da açın. (Visual Studio'da bir proje açtığınızda, proje varsayılan olarak yüklenir .)

  2. Çözüm Gezgini'nde Python projesine sağ tıklayın ve Projeyi Kaldır'ı seçin.

    Visual Studio projeyi kaldırır ve ilgili Python proje dosyasını (.pyproj) düzenleyicide açar.

    Proje dosyası açılmazsa Python projesine yeniden sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin:

  3. Visual Studio düzenleyicisinde proje dosyasında değişikliklerinizi yapın ve çalışmanızı kaydedin.

  4. Çözüm Gezgini'nde, kaldırılan projeye sağ tıklayın ve Projeyi Yeniden Yükle'yi seçin. Proje dosyasında yaptığınız değişiklikleri kaydetmeden projeyi yeniden yüklemeyi denerseniz, Visual Studio eylemi tamamlamanızı ister.

Özel komutlar geliştirirken boşalt-düzenle-kaydet-yeniden yükle işlemi yorucu hale gelebilir. Daha verimli bir iş akışı, projeyi Visual Studio'da aynı anda yüklemeyi ve Python proje dosyasını ayrı bir düzenleyicide açmayı içerir. Başka bir Visual Studio örneği, Visual Studio Code, Not Defteri vb. gibi herhangi bir düzenleyiciyi kullanabilirsiniz. Değişikliklerinizi düzenleyiciye kaydettikten ve Visual Studio'ya geri döndükten sonra, Visual Studio açık proje için proje dosyası değişikliklerini algılar ve işlem yapmanızı ister:

Açık bir proje için proje dosyasındaki değişiklikleri algıladıktan sonra Visual Studio istemini gösteren ekran görüntüsü.

Tümünü Yeniden Yükle veya Yeniden Yükle'yi seçtiğinizde Visual Studio proje dosya değişikliklerinizi açık projeye hemen uygular.

Proje dosyasıyla özel komutlar ekleme

Aşağıdaki yordamda, Tanımı Python proje dosyasına (.pyproj) ekleyip Visual Studio'da projenizi yeniden yükleyerek özel bir komutun nasıl oluşturulacağı gösterilmektedir. Özel komut, bir projenin başlangıç dosyasını doğrudan python.exe komutunu kullanarak çalıştırır. Bu, temel olarak ana Visual Studio araç çubuğunda "Hata Ayıklama Yapmadan Başlat" seçeneğinin kullanılmasıyla aynıdır.

  1. Visual Studio'da Python Uygulaması şablonunu kullanarak Python-CustomCommands adlı yeni bir Python projesi oluşturun. Yönergeler için bkz . Hızlı Başlangıç: Şablondan Python projesi oluşturma.

    Visual Studio, Python projesini oluşturur ve oturumunuza yükler. Projeyi proje dosyası (.pyproj) aracılığıyla yapılandırabilirsiniz. Bu dosya yalnızca proje açıkken ancak yüklenmediğinde Visual Studio'da görünür. Proje ayrıca uygulama kodu için bir Python dosyasına (.py) sahiptir.

  2. düzenleyicide Python_CustomCommands.py uygulama dosyasını açın ve aşağıdaki kodu ekleyin:

    print("Hello custom commands")
    
  3. Çözüm Gezgini'nde Python projesine sağ tıklayın, Python'ı seçin ve bağlam menüsündeki komutlara dikkat edin. Şu anda bağlam menüsündeki tek komutlar PyLint'i Çalıştır ve Mypy'yi Çalıştır'dır. Özel komutları tanımladığınızda, bunlar bu menüde de görünür.

  4. Visual Studio oturumunuzun dışında ayrı bir düzenleyici başlatın ve düzenleyicide Python proje dosyasını (Python-CustomCommands.pyproj) açın. (Python uygulama dosyasını (.py) değil proje dosyasını (.pyproj) açtığınızdan emin olun.)

  5. Proje dosyasında, dosyanın sonundaki kapanış </Project> öğesini bulun ve kapanış öğesinin hemen önüne aşağıdaki XML'yi ekleyin:

    <PropertyGroup>
      <PythonCommands>
        $(PythonCommands);
      </PythonCommands>
    </PropertyGroup>
    
  6. Proje dosyanızdaki değişiklikleri kaydedin ve Visual Studio'ya geri dönün. Visual Studio proje dosyanızdaki değişiklikleri algılar ve sizden işlem yapmanız istenir. İstemde, açık projenizi proje dosyası değişiklikleriyle güncelleştirmek için Yeniden Yükle'yi seçin.

  7. Çözüm Gezgini'nde Python projesine sağ tıklayın, Python'ı seçin ve bağlam menüsündeki komutları denetleyin.

    Bağlam menüsü yine de yalnızca PyLint Çalıştır ve Mypy'yi Çalıştır komutlarını gösterir. Proje dosyasına yeni eklediğiniz kod, <PythonCommands> komutunu içeren varsayılan özellik grubunu çoğaltır. Sonraki adımda, özel komut için daha fazla kod ekleyebilirsiniz.

  8. Proje dosyasını güncelleştirdiğiniz düzenleyiciye geçin. Aşağıdaki <Target> öğe tanımını <Project> öğesinin içine ekleyin. Tanımı, <Target> daha önce açıklanan tanımın <PropertyGroup> önüne veya arkasına yerleştirebilirsiniz.

    Bu <Target> öğesi, proje başlangıç dosyasını ( özelliğiyle tanımlanır) bir konsol penceresinde komutunu kullanarak çalıştırmak için özel bir komut tanımlar. Öznitelik tanımı ExecuteIn="consolepause" , konsol penceresini kapatmak için bir anahtar seçmenizi bekleyen bir konsol kullanır.

    <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. <PythonCommands> Özellik grubunu (5. adımda eklendi) aşağıdaki XML ile değiştirin. Bu söz dizimi, Name öğesi için <Target> özniteliğini tanımlar ve özel komutu Python bağlam menüsüne ekler. Komut, Başlat dosyasını çalıştır menü etiketine sahiptir.

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

    Tip

    Özel komutunuzun, belirteçte tanımlanan $(PythonCommands) varsayılan komutlar öncesinde bağlam menüsünde görünmesini istiyorsanız, komutunuz için söz dizimini <Target> belirtecin önüne getirin.

  10. Proje dosyanızdaki değişiklikleri kaydedin ve Visual Studio'ya geri dönün. Komut isteminde projenizi yeniden yükleyin.

  11. Çözüm Gezgini'nde Python projesine sağ tıklayın, Python'ı seçin ve bağlam menüsündeki komutları yeniden denetleyin.

    Şimdi özel Başlangıç dosyasını çalıştır komutu menüdedir. Özel komutu görmüyorsanız, Name açıklandığı gibi <Target> öğesi için <PythonCommands> öznitelik değerini öğesine eklediğinizi onaylayın. Ayrıca, bu makalenin devamında yer alan Sorun Giderme bölümünde listelenen önemli noktaları gözden geçirin.

  12. Başlangıç dosyasını çalıştır komutunu seçin. Bir konsol penceresi açılır ve Hello özel komutları metnini ve ardından Devam etmek için herhangi bir tuşa basın metnini görüntüler. Çıkışı onaylayın ve konsol penceresini kapatın.

    Uyarı

    Özel komut betiği, Python projeniz için etkinleştirilmiş ortamda çalışır.

  13. Proje dosyasıyla düzenleyiciye geçin. Öğe tanımında <Target> ( 8. adımda eklendi), özniteliğinin ExecuteIn değerini olarak outputdeğiştirin.

      <CreatePythonCommandItem
        ...
        ExecuteIn="output">
        ...
      </CreatePythonCommandItem>
    
  14. Değişikliklerinizi kaydedin, Visual Studio'ya dönün ve projenizi yeniden yükleyin.

  15. Python bağlam menüsünden Başlangıç dosyası özel komutunu yeniden çalıştır'ı seçin. Artık program çıktısı konsol penceresi yerine Visual Studio Çıkış penceresinde görünür:

  16. Daha fazla özel komut eklemek için aynı işlemi izleyin:

    1. Proje dosyasındaki özel komut için uygun <Target> bir öğe tanımlayın.

    2. öğesinin Name öznitelik değerini <Target> özellik grubuna <PythonCommands> ekleyin.

    3. Değişikliklerinizi proje dosyasına kaydedin.

    4. Visual Studio'da projenizi yeniden yükleyin.

Proje özelliklerini kullanma

Proje özelliklerine veya ortam değişkenlerine <Target> öğe öznitelik değerlerinde başvurmak için, $() ve $(StartupFile) gibi bir $(MSBuildProjectDirectory) belirteci içinde özellik adını kullanın. Daha fazla bilgi için bkz. MSBuild özellikleri.

($StartupFile) özelliği gibi proje özelliklerini kullanan bir komut çağırırsanız ve belirteç tanımlanmamış olduğundan komut başarısız olursa, Visual Studio siz projeyi yeniden yükleyene kadar komutu devre dışı bırakır. Projede özellik tanımını değiştiren değişiklikler yaparsanız, değişiklikleriniz ilgili komutun durumunu yenilemez. Bu durumda, yine de projeyi yeniden yüklemeniz gerekir.

Hedef< öğe yapısını anlama >

öğesini kullanarak özel bir komutun <Target> ayrıntılarını tanımlarsınız. öğesinin <Target> genel biçimi aşağıdaki sahte kodda gösterilir:

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

Hedef öznitelikler

Aşağıdaki tabloda öğe öznitelikleri listelemektedir <Target> .

Özellik Gerekli Description
Name Yes Visual Studio projesindeki komutun tanımlayıcısı. Komutun <PythonCommands>Python bağlam menüsünde görünmesi için bu adın özellik grubuna eklenmesi gerekir.
Label Yes Python bağlam menüsünde görünen kullanıcı arabirimi adı.
Returns Yes Döndürülen bilgiler, hedefi bir komut olarak tanımlayan belirteci içermelidir @(Commands) .

CreatePythonCommandItem öznitelikleri

<Target> öğesi, özel komut için ayrıntılı davranışı tanımlayan ve <CreatePythonCommandItem> öğelerini içerir<Output>. Aşağıdaki tabloda kullanılabilir <CreatePythonCommandItem> öğe öznitelikleri listelemektedir. Tüm öznitelik değerleri büyük/küçük harfe duyarlı değildir.

Attribute Gerekli Description
TargetType Yes Özniteliğin ne içerdiğini Target ve değerin özniteliğiyle Arguments birlikte nasıl kullanıldığını belirtir:
- executable: Target özniteliğinde belirtilen yürütülebilir dosyayı çalıştırın ve Arguments özniteliğindeki değeri, doğrudan komut satırına girilmiş gibi ekleyin. Değer yalnızca bağımsız değişken içermeyen bir program adı içermelidir.
- script: python.exe komutunu, dosya adını Target özniteliğinde ve değeri Arguments özniteliğinde olacak şekilde çalıştırın.
- module: python -m komutunu çalıştırın ve ardından Target özniteliğindeki modül adını ve Arguments özniteliğindeki değeri girin.
- code: özniteliğinde yer alan Target satır içi kodu çalıştırın. Arguments öznitelik değerini yoksayın.
- pip: özniteliğindeki Target komutu ve ardından özniteliğindeki değeri Arguments kullanarak pip komutunu çalıştırın. ExecuteIn özniteliği output olarak ayarlanmışsa, pip isteğin install komutunu çalıştırmak için olduğunu varsayar ve paket adı olarak Target özniteliğini kullanır.
Target Yes Özniteliğin değerine TargetType bağlı olarak kullanılacak dosya adını, modül adını, kodu veya pip komutunu belirtir.
Arguments Opsiyonel özniteliği Target ile kullanılmak üzere bir dizi argüman (mevcutsa) sağlar.
- TargetType öznitelik değeri script olduğunda, Arguments değeri, python.exe komutunun yerine Python programına sağlanır.
- TargetType öznitelik değeri code olduğunda, Arguments değeri yoksayılır.
ExecuteIn Yes komutunun çalıştırıldığı ortamı belirtir:
- console: (Varsayılan) Target özniteliğini, Arguments değeriyle, doğrudan komut satırına girilmiş gibi çalıştırır. Target Öznitelik çalışırken bir komut penceresi görüntülenir ve otomatik olarak kapatılır.
- consolepause: ile consoleaynı davranış, ancak pencereyi kapatmadan önce tuşa basmasını bekler.
- output: özniteliğini Target çalıştırır ve sonuçları Visual Studio Çıkış penceresinde görüntüler. TargetType özniteliği isepip, Visual Studio özniteliğini Target paket adı olarak kullanır ve öznitelik değerini eklerArguments.
- repl: Target özniteliğini çalıştırır. Pencerenin başlığı için isteğe bağlı görünür ad kullanılır.
- none: ile consoleaynı davranış.
WorkingDirectory Opsiyonel komutunun çalıştırıldığı klasörü tanımlar.
ErrorRegex
WarningRegEx
Opsiyonel Yalnızca ExecuteIn özniteliği olarak ayarlandığında output kullanılır. Her iki öznitelik değeri de Visual Studio'da komut çıktısını ayrıştırmak ve Hata Listesi penceresinde hataları ve uyarıları göstermek için kullandığı normal ifadeyi belirtir. Bu öznitelikler belirtilmezse, komut Hata Listesi penceresini etkilemez. Visual Studio'nın neler beklediği hakkında daha fazla bilgi için bkz. Adlandırılmış yakalama grupları.
RequiredPackages Opsiyonel requirements.txtdosyasıyla ( pip.readthedocs.io ) aynı biçimi kullanarak komut için paket gereksinimlerinin listesini sağlar. Örneğin, PyLint Çalıştır komutu biçimini pylint>=1.0.0belirtir. Komutu çalıştırmadan önce Visual Studio listedeki tüm paketlerin yüklendiğini onaylar. Visual Studio eksik paketleri yüklemek için pip kullanır.
Environment Opsiyonel Komutu çalıştırmadan önce tanımlanacağı ortam değişkenleri dizesini tanımlar. Her değişken, formu \<NAME>=\<VALUE> noktalı virgülle ayrılmış birden çok değişkenle birlikte kullanır. Birden çok değer içeren bir değişken, 'NAME=VALUE1;VALUE2' örneğinde olduğu gibi, tek veya çift tırnak içerisinde bulunmalıdır.

Normal ifadeler için adlandırılmış yakalama grupları

Visual Studio, özel komut çıkışından hataları ve uyarıları ayrıştırırken, ErrorRegex ve WarningRegex öznitelik değerlerindeki normal ifadelerin aşağıdaki adlandırılmış grupları kullanmasını bekler:

  • (?<message>...): Hatanın metni.
  • (?<code>...): Hata kodu değeri.
  • (?<filename>...): Hatanın bildirildiği dosyanın adı.
  • (?<line>...): Dosyada hatanın bildirildiği konumun satır numarası.
  • (?<column>...): Dosyada hatanın bildirildiği konumun sütun numarası.

Örneğin, PyLint aşağıdaki formda uyarılar üretir:

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

Visual Studio'nın bu uyarılardan doğru bilgileri ayıklamasına ve Hata Listesi penceresinde göstermesine izin vermek için WarningRegex Çalıştır komutunun öznitelik değeri aşağıdaki gibidir:

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

Uyarı

msg_id Öznitelik değerindeki WarningRegex söz dizimi, codeSorun 3680'de açıklandığı gibi olmalıdır.

Targets dosyasıyla özel komutları içeri aktarma

Bir Python proje dosyasında özel komutlar tanımlarsanız, komutlar yalnızca belirli bir proje için kullanılabilir. Özel komutlar oluşturmak ve bunları birden çok projede kullanmak istediğinizde, özellik grubunu bir hedefler dosyasındaki (<PythonCommands>) tüm öğelerinizle <Target> tanımlayabilir ve ardından bu dosyayı Python projelerinize aktarabilirsiniz.

  • Hedefler dosyası, Python proje dosyası (.pyproj) için açıklandığı gibi özel komutları tanımlamak için aynı biçimi ve söz dizimini kullanır. Yapılandırılan yaygın öğeler arasında <PythonCommands>, <Target>, <CreatePythonCommandItem>ve <Output>bulunur:

    <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>
    
  • Bir hedefler dosyasını projenize aktarmak için, proje dosyanızdaki <Import Project="(path)"> öğesinin içerisine herhangi bir yere bir <Project> öğesi ekleyin.

    Örneğin, Python projenizin içindeki targets klasöründe CustomCommands.targets adlı bir proje dosyanız varsa, proje dosyanıza aşağıdaki kodu ekleyin:

    <Import Project="targets/CustomCommands.targets"/>
    
  • Proje dosyanız bir hedefler dosyasını içeri aktarırsa ve projeniz Visual Studio'da açıkken hedefler dosyasında değişiklik yaparsanız, yalnızca projenizi değil projenizi içeren Visual Studio çözümünüyeniden oluşturmanız gerekir.

Örnek komutlar

Aşağıdaki bölümlerde Python projeleriniz için özel komutlar tanımlamak için kullanabileceğiniz örnek kod sağlanır.

PyLint'i çalıştırma (modül hedefi)

Aşağıdaki kod Microsoft.PythonTools.targets dosyasında görünür:

<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 install komutunu belirli bir paketle çalıştırma (pip hedefi)

Aşağıdaki komut, Visual Studio pip install my-package penceresinde komutunu çalıştırır. Bir paket geliştirip yüklemesini test ederken bunun gibi bir komut kullanabilirsiniz. <Target> öğesi, öznitelik tanımını kullandığınızda install varsayılan komutu yerine ExecuteIn="output" paket adını içerir.

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

Eski pip paketlerini göster (pip hedefi)

Aşağıdaki komut, pip'in list fonksiyonunu eski pip paketlerini tanımlamak için çalıştırır.

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

Consolepause ile yürütülebilir dosyayı çalıştırma

Aşağıdaki komut, proje klasöründen where başlayarak Python dosyalarının konumunu göstermek için işlevini çalıştırır:

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

Sunucuyu çalıştırma ve hata ayıklama sunucusu komutlarını çalıştırma

Web projeleri için Başlat sunucusu ve Başlatma hata ayıklama sunucusu komutlarının nasıl tanımlandığını keşfetmek için GitHub'daki Microsoft.PythonTools.Web.targets deposunu inceleyin.

Geliştirme paketi yükleme

Aşağıdaki kod paketleri yüklemek için pip çalıştırır:

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

fxthomas/Example.pyproj.xml 'den (GitHub), izinle kullanılır.

Windows yükleyicisi oluşturma

Aşağıdaki betik bir Windows yükleyicisi oluşturur:

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

fxthomas/Example.pyproj.xml 'den (GitHub), izinle kullanılır.

Python tekerlek paketi oluşturma

Aşağıdaki betik bir Python tekerlek paketi oluşturur:

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

fxthomas/Example.pyproj.xml 'den (GitHub), izinle kullanılır.

Özel komut sorunlarını giderme

Özel komutlarla çalışmayla ilgili olası sorunlar için aşağıdaki bölümleri gözden geçirin.

Proje dosyası yüklenmedi

Bu hata iletisi, proje dosyasında söz dizimi hataları olduğunu gösterir. İleti, satır numarası ve karakter konumu içeren belirli bir hatayı içerir.

Komut çalıştırıldıktan sonra konsol penceresi kapatılır

Komut çalıştırıldıktan hemen sonra konsol penceresi kapatılırsa, yerine ExecuteIn="consolepause"öznitelik tanımını kullanınExecuteIn="console".

Menüde komut eksik

Python bağlam menüsünde özel komutu görmüyorsanız aşağıdaki öğeleri denetleyin:

  • Komutun <PythonCommands> özellik grubuna eklendiğinden emin olun.
  • Komut adının, komut listesinde tanımlandığı şekilde <Target> öğesinde belirtilen adla eşleştiğinden emin olun.

İşte bir örnek. Aşağıdaki XML kod parçacığında, Example adının <PythonCommands> özellik grubundaki adı, ExampleCommand öğe tanımındaki <Target> adıyla eşleşmiyor. Visual Studio adlı Examplebir komut bulamadığından hiçbir komut görüntülenmez. Komut listesinde kullanın ExampleCommand veya hedefin adını yalnızca Exampleolacak şekilde değiştirin.

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

Komut çalıştırılırken hata oluştu, komut hedefi alınamadı

Bu hata iletisi, <Target> veya <CreatePythonCommandItem> öğelerinin içeriğinin yanlış olduğunu gösterir.

Bu hatanın bazı olası nedenleri şunlardır:

  • Gerekli <Target> öğe özniteliği boş.
  • Gerekli TargetType öznitelik boş veya tanınmayan bir değer içeriyor.
  • Gerekli ExecuteIn öznitelik boş veya tanınmayan bir değer içeriyor.
  • ErrorRegex veya WarningRegex özniteliği, ExecuteIn="output" öznitelik tanımı ayarlanmadan belirtilmiştir.
  • öğesinde tanınmayan öznitelikler var. Örneğin, öznitelik başvurusu, Argumnets yerine Arguments olarak yanlış yazılmış olabilir.

Tanımlanmamış bir özelliğe başvuruyorsanız öznitelik değerleri boş olabilir. Belirteci $(StartupFile) kullanıyorsanız ancak projede hiçbir başlangıç dosyası tanımlanmamışsa, belirteç boş bir dizeye çözümleniyor. Böyle durumlarda, varsayılan bir değer tanımlamak isteyebilirsiniz. Örneğin, Bottle, Flask ve Django proje şablonlarında tanımlanan Sunucuyu çalıştır ve Hata ayıklama sunucusunu çalıştır komutları varsayılan olarak manage.py dosyasını kullanır (proje özelliklerinde bir sunucu başlangıç dosyası belirtilmemişse).

Visual Studio yanıt vermeyi durduruyor ve çöküyor

Visual Studio'nun, özel komut çalıştırıldığında yanıt vermeyi durdurup kilitlendiği durumlarda, büyük olasılıkla ExecuteIn="output" öznitelik tanımı ile bir konsol komutunu çalıştırmaya çalışıyorsunuz. Böyle durumlarda, Visual Studio çıkışı ayrıştırmaya çalıştığında kilitlenebilir. Bu koşuldan kaçınmak için bunun yerine öznitelik tanımını kullanın ExecuteIn="console" . Daha fazla bilgi için bkz . Sorun 3681.

Komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor

Öznitelik tanımını ayarladığınızdaTargetType="executable", Target özniteliğindeki değer, veya python gibi yalnızca program adı olmalı ve herhangi bir bağımsız değişken içermemelidir. Bu durumda, tüm argümanları Arguments özniteliğine taşıyın.