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

  • Windows üzerinde Visual Studio, Python iş yükleri desteğiyle birlikte yüklenir. Daha fazla bilgi için bkz . Visual Studio'da Python desteğini yükleme.

Mac için Visual Studio desteklenmez. Daha fazla bilgi için bkz. Mac için Visual Studio neler oluyor? 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ü.

Visual Studio'daki 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:

    Visual Studio 2022'de Python projesi menüsüne bir Django projesi için eklenen özel komutları gösteren ekran görüntüsü.

    Visual Studio'da Python projesi menüsüne bir Django projesi için eklenen özel komutları gösteren ekran görüntüsü.

Ö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'da 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:

    Visual Studio'da özel komutlar eklemek için kaldırılmış proje dosyasını düzenlemeyi gösteren ekran görüntüsü.

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

  4. Çözüm Gezgini'da, 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 unload-edit-save-reload 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 komutunu kullanarak python.exe çalıştırır. Bu, temel olarak ana Visual Studio araç çubuğunda hata ayıklama> olmadan 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 kaldırıldığında 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 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 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, PyLint komutunu içeren varsayılan <PythonCommands> ö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. öğesinin içine <Project> aşağıdaki <Target> öğe tanımını ekleyin. Tanımı, <Target> daha önce açıklanan tanımın <PropertyGroup> önüne veya arkasına yerleştirebilirsiniz.

    Bu <Target> öğe, konsol penceresinde komutunu kullanarak python.exe projenin başlangıç dosyasını (StartupFile özelliğiyle tanımlanır) ç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, özel komutu Python bağlam menüsüne <Target> ekleyen öğesinin özniteliğini tanımlarName. Komut, Başlat dosyasını çalıştır menü etiketine sahiptir.

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

    İpucu

    Ö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. İstemde projenizi yeniden yükleyin.

  11. Çözüm Gezgini'de 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, 9. adımda açıklandığı gibi öğesi için <Target> öznitelik değerini öğeye eklediğinizi Name<PythonCommands> onaylayın. Ayrıca, bu makalenin devamında yer alan Sorun Giderme bölümünde listelenen önemli noktaları gözden geçirin.

    Visual Studio 2022'de Python bağlam menüsünde başlangıç dosyası özel çalıştır komutunu gösteren ekran görüntüsü.

    Visual Studio'daki Python bağlam menüsündeki Başlangıç dosyası özel komutunu gösteren ekran görüntüsü.

  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.

    Visual Studio'da bir konsol penceresinde özel komut çıkışını gösteren ekran görüntüsü.

    Not

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

    Visual Studio 2022 Çıkış penceresinde görüntülenen özel komut çıkışını gösteren ekran görüntüsü.

    Visual Studio Çıkış penceresinde görüntülenen özel komut çıkışını gösteren ekran görüntüsü.

  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

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

StartupFile özelliği gibi ($StartupFile)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> .

Öznitelik Zorunlu Veri Akışı Açıklaması
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üntülenen kullanıcı arabirimi görünen 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 <Output> öğelerini içerir<CreatePythonCommandItem>. 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 Zorunlu Veri Akışı Açıklaması
TargetType Yes Özniteliğin ne içerdiğini Target ve değerin özniteliğiyle Arguments birlikte nasıl kullanıldığını belirtir:
- executable: özniteliğinde Target adlı yürütülebilir dosyayı çalıştırarak özniteliğindeki Arguments 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: komutunu özniteliğinde Target dosya adıyla ve ardından özniteliğindeki Arguments değerle çalıştırınpython.exe.
- module: komutunu ve ardından öznitelikteki Target modül adını ve ardından özniteliğindeki Arguments değeri çalıştırınpython -m.
- code: özniteliğinde yer alan Target satır içi kodu çalıştırın. Öznitelik değerini yoksayın Arguments .
- pip: özniteliğindeki Target komutu ve ardından özniteliğindeki değeri Arguments kullanarak pip komutunu çalıştırın. ExecuteIn özniteliği olarak outputayarlanırsa pip, isteğin komutu çalıştırmak install olduğunu varsayar ve paket adı olarak özniteliğini Target 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 İsteğe bağlı özniteliğiyle Target kullanılacak bir bağımsız değişken dizesi (varsa) sağlar.
- Öznitelik değeri olduğunda TargetTypescriptArguments, değer komutu yerine python.exe Python programına sağlanır.
- Öznitelik değeri olduğunda TargetTypecodeArguments, değer yoksayılır.
ExecuteIn Yes komutunun çalıştırıldığı ortamı belirtir:
- console: (Varsayılan) özniteliğini, doğrudan komut satırına Arguments girilmiş gibi değeriyle çalıştırırTarget. 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: Python Etkileşimli Penceresinde özniteliğini çalıştırırTarget. İsteğe bağlı görünen ad, pencerenin başlığı için kullanılır.
- none: ile consoleaynı davranış.
WorkingDirectory İsteğe bağlı komutunun çalıştırıldığı klasörü tanımlar.
ErrorRegex
WarningRegEx
İsteğe bağlı Yalnızca ExecuteIn özniteliği olarak ayarlandığında outputkullanı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 İsteğe bağlı requirements.txt dosyası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 İsteğe bağlı 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, içinde olduğu gibi tek veya çift tırnak içinde 'NAME=VALUE1;VALUE2'bulunmalıdır.

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

Visual Studio özel komut çıkışından hataları ve uyarıları ayrıştırdığında, ve WarningRegex öznitelik değerlerinde ErrorRegex 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 Pylint WarningRegex Çalıştır komutunun öznitelik değeri aşağıdaki gibidir:

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

Not

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 (.targets) tüm öğelerinizle <Target> tanımlayabilir <PythonCommands> 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 targets dosyasını projenize aktarmak için, proje dosyanızdaki öğenin içinde <Project> herhangi bir yere bir <Import Project="(path)"> öğe 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.

    Visual Studio'da güncelleştirilmiş projeyi içeren çözümü yeniden oluşturma işlemini gösteren ekran görüntüsü.

Ö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 yüklemesini belirli bir paketle çalıştırma (pip hedefi)

Aşağıdaki komut, Visual Studio Çıkış penceresinde komutunu çalıştırırpip install my-package. Bir paket geliştirip yüklemesini test ederken bunun gibi bir komut kullanabilirsiniz. <Target> öğesi, öznitelik tanımını kullandığınızda ExecuteIn="output" varsayılan komutu yerine install 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, eski pip paketlerini tanımlamak için pip'i işleviyle list ç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'dan (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'dan (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'dan (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="console"öznitelik tanımını kullanınExecuteIn="consolepause".

Menüde komut eksik

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

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

Aşağıda bir örnek verilmiştir. Aşağıdaki XML kod parçacığında, Example özellik grubundaki <PythonCommands> ad öğe tanımındaki adla <Target> eşleşmiyorExampleCommand. 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, veya <CreatePythonCommandItem> öğelerinin içeriğinin <Target> 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, öznitelik tanımı ayarlanmadan ExecuteIn="output" belirtilir.
  • öğesinde tanınmayan öznitelikler var. Örneğin, öznitelik başvurusu yerine Argumentsyanlış yazılmış Argumnets 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, kilitleniyor

Özel komutu çalıştırdığınızda Visual Studio yanıt vermeyi durdurur ve kilitlenirse, büyük olasılıkla öznitelik tanımıyla bir konsol komutu çalıştırmaya ExecuteIn="output" çalışıyorsunuz demektir. 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", öznitelikteki Target değer yalnızca veya python.exe gibi python bağımsız değişkenler olmadan yalnızca program adı olmalıdır. Bu durumda, bağımsız değişkenleri özniteliğine Arguments taşıyın.