{"id":1274,"date":"2018-04-12T14:34:03","date_gmt":"2018-04-12T12:34:03","guid":{"rendered":"http:\/\/ictknow-how.ch\/blog\/?p=1274"},"modified":"2023-12-12T13:40:30","modified_gmt":"2023-12-12T12:40:30","slug":"python-code-mit-visual-studio-2017-debuggen-part-1-die-installation","status":"publish","type":"post","link":"https:\/\/ictknow-how.ch\/blog\/2018\/04\/12\/python-code-mit-visual-studio-2017-debuggen-part-1-die-installation\/","title":{"rendered":"Python-Code mit Visual Studio 2017 debuggen? Part 1 &#8211; Die Installation"},"content":{"rendered":"<p>Bisher war es ziemlich kompliziert, Python-Code unter Windows zu entwickeln oder zu debuggen. Ausgerechnet Microsoft hat sich in der Version 15.6 von Visual Studio 2017 entschlossen, Python ebenfalls als Programmiersprache zu unterst\u00fctzen. Wie das am Beispiel von MusicBrainz Picard-Code funktioniert, zeigen diese Schritte:<\/p>\n<p>1.) Man installiert Visual Studio 2017 (VS) mit den sogenannten Arbeitsauslastungen namens \u00ab<em>Enwicklung f\u00fcr die universelle Windows-Plattform\u00bb<\/em>\u00a0und \u00ab<em>Desktop-Entwicklung mit C++\u00bb<\/em>.\u00a0 Danach startet man VS das erste mal. Wer nur mal kurz testen will, braucht keinen Produkt-Key und keine MS-Anmeldung. Die Version l\u00e4uft damit 30 Test-Tage.<\/p>\n<p>2.) Relativ schnell erscheint in der rechten oberen Ecke eine schwarze Flagge auf orangem Grund:<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1276\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update-300x63.png\" alt=\"\" width=\"900\" height=\"189\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update-300x63.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update-768x161.png 768w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update-1024x215.png 1024w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-Update.png 1235w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/a><br \/>\n3.) Nach dem Aktualisieren auf die neue Version 15.6 steht dann erstmals unter \u00ab<em>Web und Cloud\u00bb<\/em>\u00a0auch die\u00a0M\u00f6glichkeit \u00ab<em>Python-Entwicklung\u00bb<\/em>\u00a0zur Verf\u00fcgung. Praktischerweise sollte man hier auch gleich die Variante \u00abPython 3, <strong>32bit<\/strong> (3.6.3)\u00bb aktivieren und mitinstallieren:<br \/>\n<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1303 size-large\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2-1024x521.png\" alt=\"\" width=\"1024\" height=\"521\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2-1024x521.png 1024w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2-300x153.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2-768x391.png 768w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2.png 1567w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Installation-Visual-Studio-2017-neu-mit-Python-2.png\" target=\"_blank\" rel=\"noopener\"><br \/>\n<\/a>4.) F\u00fcr unser Beispiel laden wir nun den <a href=\"https:\/\/github.com\/metabrainz\/picard\/tree\/2.0.0dev6\" target=\"_blank\" rel=\"noopener\">Python-Source-Code<\/a> von <a href=\"https:\/\/picard.musicbrainz.org\/\" target=\"_blank\" rel=\"noopener\">MusicBrainz Picard<\/a> (einem ID3-Tagging-Programm) herunter, entpacken den kompletten Code samt Unterverzeichnissen aus dem ZIP-File und kopieren alles z.B. nach<br \/>\n<code>C:\\Users\\UserXYZ\\Documents\\Visual Studio 2017\\Projects\\picard-2.0.0dev6<\/code><\/p>\n<p><a name=\"5\"><\/a>5.) F\u00fcr dieses Projekt speziell ist, dass wir die lokalen \u00dcbersetzungen f\u00fcr das GUI manuell mit GetText vorbereiten m\u00fcssen. Das funktioniert aber nicht mit der von den <a href=\"https:\/\/picard.musicbrainz.org\/docs\/build-windows\/\" target=\"_blank\" rel=\"noopener\">Entwicklern<\/a> angegebenen GnuWin32-Variante und leider auch mit keiner der sp\u00e4ter ladbaren PIP-Bibliotheken. Am einfachsten l\u00e4dt man deshalb die statische <a href=\"https:\/\/github.com\/mlocati\/gettext-iconv-windows\/releases\/download\/v0.19.8.1-v1.15\/gettext0.19.8.1-iconv1.15-static-64.exe\" target=\"_blank\" rel=\"noopener\"><code>gettext0.19.8.1-iconv1.15-static-64.exe<\/code><\/a>\u00a0herunter und installiert sie ausserhalb von VS. <a href=\"https:\/\/ictknow-how.ch\/blog\/2018\/04\/12\/python-code-mit-visual-studio-2017-debuggen-part-3-die-sache-mit-gettext\/\">Hier steht<\/a>, wie man die \u00dcbersetzungen vorbereitet.<\/p>\n<p>6.) Danach startet man VS. Die Entwickler von <em>Picard<\/em> bieten keine Projekt-Datei f\u00fcr VS an. Deshalb w\u00e4hlt man \u00fcber Datei -&gt; Neu -&gt; Projekt -&gt; Python -&gt; \u00abAus vorhandenem Python-Code\u00bb und verwendet den Assistenten:<br \/>\n<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1293\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-300x226.png\" alt=\"\" width=\"300\" height=\"226\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-300x226.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-768x580.png 768w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent.png 861w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>\u00a0\u00a0<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1294\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-2-300x226.png\" alt=\"\" width=\"300\" height=\"226\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-2-300x226.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-2-768x580.png 768w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Assistent-2.png 861w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nw\u00e4hlt also das vorbereitete Python-Code-Verzeichnis aus (und f\u00fcr dieses Projekt gibt man zus\u00e4tzlich den Pfad zum <code>\\bin<\/code>-Verzeichnis der gettext-Installation an). Im zweiten Screen w\u00e4hlt man die 32-bit Variante, weil z.B. die sp\u00e4ter erkl\u00e4rte <code>discid<\/code>-Bibliothek nicht 64bit-tauglich ist. Ebenfalls gibt man die Datei <code>tagger.py<\/code> als Startdatei an. Das wird zwar ignoriert, ist aber vermutlich ein Fehler in diesem Asssistenten.<\/p>\n<p>7.) VS l\u00e4dt damit das gesamte Projekt &#8211; in den f\u00fcr .NET-Entwickler gewohnten &#8211; Projektmappenexplorer.<br \/>\nDer Paket-Manager f\u00fcr .NET heisst NuGet. F\u00fcr Python nennt er sich PIP. PIP findet man in VS unter Extras -&gt; Python -&gt; Python-Umgebungen:<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Python-Umgebungen.png\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1299\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Python-Umgebungen-300x144.png\" alt=\"\" width=\"300\" height=\"144\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Python-Umgebungen-300x144.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Python-Umgebungen-768x367.png 768w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/Python-Python-Umgebungen.png 999w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>8.) Unser Projekt <em>Picard\u00a0<\/em>ben\u00f6tigt die folgenden PIP-Pakete: <code>PyQt5<\/code>, <code>mutagen<\/code> und <code>discid<\/code>. Diese Pakete installiert man im Tab \u00abPython- Umgebungen\u00bb durch einen Klick auf den Begriff \u00ab\u00dcbersicht\u00bb, die Auswahl von \u00abPakete (PyPI)\u00bb und eintippen der Paketnamen.<br \/>\n<a href=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/\u00dcbersicht-Pakete-PyPI.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1300\" src=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/\u00dcbersicht-Pakete-PyPI-300x114.png\" alt=\"\" width=\"300\" height=\"114\" srcset=\"https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/\u00dcbersicht-Pakete-PyPI-300x114.png 300w, https:\/\/ictknow-how.ch\/blog\/wp-content\/uploads\/2018\/04\/\u00dcbersicht-Pakete-PyPI.png 387w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Sobald man den Paketnamen mit der zus\u00e4tzlichen Versionsnummer und &#8222;&#8230;installieren&#8220; sieht, klickt man den richtigen Eintrag an und wartet die Installation ab. Den Fortschritt und Erfolg sieht man standardm\u00e4ssig unten links im \u00abAusgabefenster\u00bb. W\u00e4hlt man wie erw\u00e4hnt unter Python-Umgebungen \u00abPython 3.6 (<strong>32bit<\/strong>)\u00bb-Variante, funktioniert das einwandfrei.<\/p>\n<p>8b) Unter 64bit verweigert das Paket <code>discid<\/code> die Installation. Speziell an <code>discid<\/code> ist auch, dass man selbst in der 32bit-Variante die <a href=\"https:\/\/musicbrainz.org\/doc\/libdiscid\" target=\"_blank\" rel=\"noopener\"><code>discid.dll<\/code><\/a> manuell in ein Verzeichnis kopieren muss, welches in der PATH-Umgebungsvariable f\u00fcr VS zug\u00e4nglich ist. Das w\u00e4re z.B. in <code>C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_86<\/code>.<\/p>\n<p>9.) Im Projektmappen-Explorer muss man die Datei <code>tagger.py<\/code> mit der rechten Maustaste ausw\u00e4hlen und \u00abAls Startdatei festlegen\u00bb (obwohl man das im Assistenten ja schon angegeben hat). Nun speichert man sicherheitshalber das ganze Projekt und erstellt damit die *.sln-Datei.<\/p>\n<p>10.) Nun endlich k\u00f6nnen wir das Projekt wie gewohnt mit <kbd class=\"keyboard-key nowrap KeybKey\">F5<\/kbd> starten. Was nun ungewohntes passiert, beschreibe ich im <a href=\"https:\/\/ictknow-how.ch\/blog\/2018\/04\/12\/python-code-mit-visual-studio-2017-debuggen-part-2-gewoehnungsbeduerftiges-ausfuehren\/\">n\u00e4chsten Beitrag.<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;1274&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;Rate this post&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 votes)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;title&quot;:&quot;Python-Code mit Visual Studio 2017 debuggen? Part 1 - Die Installation&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\">Rate this post<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bisher war es ziemlich kompliziert, Python-Code unter Windows zu entwickeln oder zu debuggen. Ausgerechnet Microsoft hat sich in der Version 15.6 von Visual Studio 2017 entschlossen, Python ebenfalls als Programmiersprache zu unterst\u00fctzen. Wie das am Beispiel von MusicBrainz Picard-Code funktioniert, zeigen diese Schritte: 1.) Man installiert Visual Studio 2017 (VS) mit den sogenannten Arbeitsauslastungen namens &#8230; <a title=\"Python-Code mit Visual Studio 2017 debuggen? Part 1 &#8211; Die Installation\" class=\"read-more\" href=\"https:\/\/ictknow-how.ch\/blog\/2018\/04\/12\/python-code-mit-visual-studio-2017-debuggen-part-1-die-installation\/\" aria-label=\"Mehr Informationen \u00fcber Python-Code mit Visual Studio 2017 debuggen? Part 1 &#8211; Die Installation\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[256,111,112,113],"class_list":["post-1274","post","type-post","status-publish","format-standard","hentry","category-musicbrainz","tag-debugging","tag-picard","tag-python","tag-visual-studio-2017"],"_links":{"self":[{"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/posts\/1274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/comments?post=1274"}],"version-history":[{"count":0,"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/posts\/1274\/revisions"}],"wp:attachment":[{"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/media?parent=1274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/categories?post=1274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ictknow-how.ch\/blog\/wp-json\/wp\/v2\/tags?post=1274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}