Archive for 22. Mai 2019

Python unter Windows 10 Mai 2019 Update 1903 installieren

22 Mai 2019

Mit jedem Release öffnet sich Microsoft immer mehr der Open Source Welt. Neuestes Beispiel ist die nun supereinfache Installation von Python unter Windows 10 Mai 2019 Update (1903).

Gibt man Python in der Eingabeaufforderung oder bei Powershell ein, dann kommt nicht etwa diese erwartete Fehlermeldung:

C:\Users\Tester>python
Der Befehl "python" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Statt dessen öffnet sich der Microsoft Store mit der Möglichkeit Python als App zu installieren.

Microsoft Windows [Version 10.0.18362.113]
(c) 2019 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\Tester>python
C:\Users\Tester>

Man bekommt also keine Fehlermeldung mehr, sondern die Möglichkeit das fehlende Programm zu installieren.

Dabei handelt es sich um Python Version 3.7. Python 2.7 macht keinen Sinn denn Python 2.7 wird 2020 eh Geschichte sein: https://www.heise.de/developer/artikel/Die-Tage-sind-gezaehlt-End-of-Life-fuer-Python-2-4427023.html.

Man könnte nun den Errorlevel abragen, ob dieser gesetzt ist und in Batchdateien oder Skripten darauf reagieren. Wir nehmen dazu wie immer Powershell, damit kann man die betreffenden Werte einfacher abfragen:

PS C:\Users\Tester> $LASTEXITCODE
PS C:\Users\Tester> python
PS C:\Users\Tester> $LASTEXITCODE
9009
PS C:\Users\Tester>

Wir sehen also, dass der Errorlevel als 9009 zurückgegeben wird und keine Fehlermeldung erfolgt. Die Fehlermeldung müsste normalerweise lauten:

python : Die Benennung "python" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines
ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern
enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:1
+ python
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (python:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Es gibt aber eine Besonderheit die es zu beachten gilt. Der Microsoft Store wird nur bei einer interaktiven Eingabe aufgemacht, sollte man die Abfrage nach dem Errorlevel nun Skripten wollen, dann kann man ewig warten. Aus diesem Grund hier ein kleines Powershell-Skript welches das Vorhandensein von Python prüft, gegebenenfalls den Storelink aufmacht und auf dessen Installation wartet:

$v=python –version
if ($v -eq $null) {
  start ‚ms-windows-store://pdp/?ProductId=9NJ46SX7X90P‘
};
do {
  $v=python –version
} until (($LASTEXITCODE -ne 9009) –or ($v -ne $null) )

An dieser Stelle kann man nun davon ausgehen, dass man Python auf dem Rechner hat. Zumindest für den aktuellen Benutzer, denn die Apps über den Store werden in der Regel pro Benutzer installiert. Dies verdeutlich sich auch bei der Suche nach den betreffenden Dateien. So sah es vor der Installation aus:

C:\Users\Tester>dir python.* /s
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: 6247-3F6E

Verzeichnis von C:\Users\Tester\AppData\Local\Microsoft\WindowsApps

08.05.2019  00:16                 0 python.exe
               1 Datei(en),              0 Bytes

Verzeichnis von C:\Users\Tester\AppData\Local\Microsoft\WindowsApps\Microsoft.
DesktopAppInstaller_8wekyb3d8bbwe

08.05.2019  00:16                 0 python.exe
               1 Datei(en),              0 Bytes

Es gibt also eine Python.exe mit 0 Bytes, wenn man nach Python3.exe sucht wird man ebenfalls fündig.

Nach der Installation aus dem App Store gesellt sich ein weiteres Verzeichnis hinzu:

C:\Users\Tester\AppData\Local\Microsoft\WindowsApps\Python
SoftwareFoundation.Python.3.7_qbz5n2kfra8p0

In diesem Verzeichnis befinden sich nun weitere 0 Byte EXE-Dateien:

22.05.2019  07:48    <DIR>          .
22.05.2019  07:48    <DIR>          ..
22.05.2019  07:48                 0 idle.exe
22.05.2019  07:48                 0 idle3.7.exe
22.05.2019  07:48                 0 idle3.exe
22.05.2019  07:48                 0 pip.exe
22.05.2019  07:48                 0 pip3.7.exe
22.05.2019  07:48                 0 pip3.exe
22.05.2019  07:48                 0 python.exe
22.05.2019  07:48                 0 python3.7.exe
22.05.2019  07:48                 0 python3.exe
22.05.2019  07:48                 0 pythonw.exe
22.05.2019  07:48                 0 pythonw3.7.exe
22.05.2019  07:48                 0 pythonw3.exe

Man bekommt also durch die Installation des Python Pakets alle relevanten Python-Zusatzprogramme frei Haus geliefert.

Neben dem paketspezifischen Verzeichnis finden oben aufgeführte Pythonprogramme auch Einzug in das Verzeichnis C:\Users\Tester\AppData\Local\Microsoft\WindowsApps. Der Hintergrund dürfte sein, dass sich C:\Users\Tester\AppData\Local\Microsoft\WindowsApps bei den Umgebungsvariablen für die automatische Suche nach Programm also PATH aufgeführt wird. D. h. durch diese Vorgehensweise erreicht man, dass das Programm automatisch gestartet werden kann, egal wo man sich befindet. Gesagt getan:

C:\>python
Python 3.7.3 (tags/v3.7.3:ef4ec6ed12, Mar 25 2019, 22:05:12) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()

Klappt also tatsächlich. Und wie verhält es sich mit anderen Programmen?

C:\>pip list
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the ‚python -m pip install –upgrade pip‘ command.

Klappt also auch, wobei, wenn man ein aktuelles Paket bezogen hat muss man nochmal Hand anlegen um PIP auf den aktuellen Stand zu bekommen? Tja ist leider so. Auch bei TAR, SSH und CURL geht Microsoft äußert konservativ vor und langt einmal hinzugefügte Programme nicht mehr an. Ob dies bei Python auch zutrifft werden wir sehen.

Aber die spannende Frage ist, kann ich pip trotzdem updaten?

C:\>python -m pip install –upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5c/e0/be401c003291b
56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
(1.4MB)
    100% |████████████████████████████████| 1.4MB 468kB/s
Installing collected packages: pip
  Found existing installation: pip 19.0.3
    Uninstalling pip-19.0.3:
Could not install packages due to an EnvironmentError: [WinError 5] Zugriff verweigert: ‚c:\\program files\\windowsapps\\pythonsoftwarefoundation.python.3.7_3.7.
1008.0_x64__qbz5n2kfra8p0\\lib\\site-packages\\pip-19.0.3.dist-info\\entry_points.txt‘
Consider using the `–user` option or check the permissions.

You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the ‚python -m pip install –upgrade pip‘ command.

Also der erste Versuch ging schief aber ist auch nachvollziehbar, denn das Python-Paket würde dem Benutzer zugeordnet, mal sehen, ob es mit dem passenden Parameter klappt:

C:\>python -m pip install –upgrade pip –user
Collecting pip
  Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b
56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl

Installing collected packages: pip
Successfully installed pip-19.1.1
You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the ‚python -m pip install –upgrade pip‘ command.

Das sieht ja schon mal nicht schlecht aus:

C:\>pip list
Package Version
——- ——-
pip     19.1.1

Also man hat nun eine recht schnelle, einfache Methode Python auf seinen Rechner zu bekommen.

Soweit so gut! Allerdings, wie so oft gibt es einen Pferdefuß und der wird wahrscheinlich erst mit Python 3.8 oder 3.9 aus der Welt geschafft. Denn möchte man wirklich produktiv mit Python arbeiten, dann sollten solche Dinge nicht passieren:

C:>pip install flask

Installing collected packages: Werkzeug, MarkupSafe, Jinja2, click, itsdangerous, flask
  WARNING: The script flask.exe is installed in ‚C:\Users\Tester\AppData\Local\Packages\PythonSoftwareFoundation.
Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts‘ which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use –no-warn-script-location.
Successfully installed Jinja2-2.10.1 MarkupSafe-1.1.1 Werkzeug-0.15.4 click-7.0 flask-1.0.3 itsdangerous-1.1.0

D. h. ein einfacher Aufruf von “flask run” ist später nicht möglich. Als Lösung gibt es zwei Möglichkeiten, entweder man ruft

C:\Users\Tester\AppData\Local\Packages\PythonSoftwareFoundation.
Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts\flask.exe run

direkt auf oder man fügt den Pfad der Umgebungsvariablen PATH manuell hinzu:

set path=%path%;C:\Users\Tester\AppData\Local\Packages\PythonSoftware
Foundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts

Hier der Link zum Aufhängerartikel: https://devblogs.microsoft.com/python/python-in-the-windows-10-may-2019-update/

Möglich Probleme beim Erkennen ob Python installiert ist: https://github.com/Microsoft/PTVS/issues/5189, die Lösung ist das Beachten der PATH-Umgebungsvariablen.

Noch der Link zum Store: ms-windows-store://pdp/?ProductId=9NJ46SX7X90P sowie die Publisher-ID: qbz5n2kfra8p0

Werbeanzeigen