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:
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:
Python projenizi Visual Studio'da açın. (Visual Studio'da bir proje açtığınızda, proje varsayılan olarak yüklenir .)
Çö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 düzenleyicisinde proje dosyasında değişikliklerinizi yapın ve çalışmanızı kaydedin.
Çö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:
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.
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.
düzenleyicide Python_CustomCommands.py uygulama dosyasını açın ve aşağıdaki kodu ekleyin:
print("Hello custom commands")
Çö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.
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.)
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>
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.
Çö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.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 kullanarakpython.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>
<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.Proje dosyanızdaki değişiklikleri kaydedin ve Visual Studio'ya geri dönün. İstemde projenizi yeniden yükleyin.
Çö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ğiniziName
<PythonCommands>
onaylayın. Ayrıca, bu makalenin devamında yer alan Sorun Giderme bölümünde listelenen önemli noktaları gözden geçirin.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.
Not
Özel komut betiği, Python projeniz için etkinleştirilmiş ortamda çalışır.
Proje dosyasıyla düzenleyiciye geçin. Öğe tanımında
<Target>
(8. adımda eklendi), özniteliğininExecuteIn
değerini olarakoutput
değiştirin.<CreatePythonCommandItem ... ExecuteIn="output"> ... </CreatePythonCommandItem>
Değişikliklerinizi kaydedin, Visual Studio'ya dönün ve projenizi yeniden yükleyin.
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:
Daha fazla özel komut eklemek için aynı işlemi izleyin:
Proje dosyasındaki özel komut için uygun
<Target>
bir öğe tanımlayın.öğesinin
Name
öznitelik değerini<Target>
özellik grubuna<PythonCommands>
ekleyin.Değişikliklerinizi proje dosyasına kaydedin.
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 output ayarlanı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 TargetType script Arguments , değer komutu yerine python.exe Python programına sağlanır. - Öznitelik değeri olduğunda TargetType code Arguments , 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 console aynı 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 console aynı 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 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 |
İ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.0 belirtir. 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, code
Sorun 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.
Ö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=""--msg-template={abspath}({line},{column}): warning {msg_id}: {msg} [{C}:{symbol}]" -r n @(Compile, ' ')"
WorkingDirectory="$(MSBuildProjectDirectory)"
ExecuteIn="output"
RequiredPackages="pylint>=1.0.0"
WarningRegex="$(PyLintWarningRegex)">
<Output TaskParameter="Command" ItemName="Commands" />
</CreatePythonCommandItem>
</Target>
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 "$(InstallerTitle)" --dist-dir="$(DistributionOutputDir)""
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="$(DistributionOutputDir)""
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ı Example
bir komut bulamadığından hiçbir komut görüntülenmez. Komut listesinde kullanın ExampleCommand
veya hedefin adını yalnızca Example
olacak ş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
veyaWarningRegex
özniteliği, öznitelik tanımı ayarlanmadanExecuteIn="output"
belirtilir.- öğesinde tanınmayan öznitelikler var. Örneğin, öznitelik başvurusu yerine
Arguments
yanlış 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin