Python Environments unter Windows verwalten, Standard für cmd festlegen

Probleme bei der Installation?
Antworten
aisberg
User
Beiträge: 8
Registriert: Freitag 27. September 2019, 16:45

Mittwoch 9. Oktober 2019, 10:20

Hallo,
Ich arbeite unter Windows.
Wenn ich ein Python Skript "einfach so" ausführe, funktioniert das auch. Allerdings ist mir nicht klar, wo und wie das dabei verwendete Environment festgelegt wird.

Code: Alles auswählen

import sys
print(sys.version) 
print("\n".join(sys.path))
input()
liefert:
3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
D:\Users\ggoer\OneDrive\Python
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python37.zip
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\DLLs
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\site-packages

So weit, so gut.
Aber wie entscheidet Windows, dass es ausgerechnet dieses Environment verwenden soll?
Ich dachte, das steht vielleicht in der Windows-Umgebungsvariablen. Aber ich kann das Verzeichnis weder in der Systemvariablen "Path" noch in der Benutzervariablen "Path" finden.

Im Visual Studio werden mir 4 Environments angezeigt:
  • Anaconda 5.2.0
    Microsoft Machine Learning Server 4.5.12.0
    Python 3.7 (32-bit)
    Python 3.7 (64-bit)
Woher Visual Studio weiß, welche Environments es gibt, liegt wohl daran, was über Visual Studio oder über den SQL Server oder über Microsoft Machine Learning Server installiert wurde.
Alle Environments werden da nämlich auch nicht angezeigt, so fehlen:

3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
c:\users\ggoer\azuredatastudio-python\0.0.1\python.exe

3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]
C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\python.exe

Wie lege ich explizit fest, welche Python Umgebung vom cmd verwendet werden sollen?

Und da man aus VS heraus PowerShell öffnen kann, um damit den Aufruf mit Argumenten zu testen (wie, weiß ich noch nicht, da muss ich mich auch noch einlesen), stellt sich bestimmt auch die Frage, wie man für PowerShell-Aufrufe von Python-Scripten die richtige Umgebung festlegt.
__deets__
User
Beiträge: 7094
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 9. Oktober 2019, 10:40

Was sagt denn sys.executable? Denn meiner Meinung nach ist die einzige Art wie das Executable in der Shell gefunden wird per PATH. Das sollte da schon auftauchen. Ein virtualenv zu aktivieren bedeute ja auch nix anderes, als PATH so zu setzen, dass "python" einzugeben den virtualenv-Interpreter als erstes startet.
aisberg
User
Beiträge: 8
Registriert: Freitag 27. September 2019, 16:45

Freitag 18. Oktober 2019, 06:15

Ich denke, ich weiß, woher das kommt und warum im PATH nichts festgelegt ist:
Es liegt daran, welchen Programm im Windows als Standard für die Erweiterung .py festgelegt wurde. Das Programm muss es also gar nicht im PATH geben.
Das ist ja auch eigentlich klar, denn woher soll die Kommandozeile sonst wissen, was mit einer .py Datei zu machen ist.
Benutzeravatar
snafu
User
Beiträge: 6013
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 18. Oktober 2019, 07:26

Jetzt verstehe ich, was du mit "einfach so" meintest. Ja richtig, es liegt an der Verknüpfung für die Dateiendung. Dann muss man beim Aufruf kein "python" davor setzen und man kann sogar die Endung ".py" weglassen.
Benutzeravatar
__blackjack__
User
Beiträge: 4863
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 18. Oktober 2019, 13:59

@snafu: Unter Windows kann man die Dateiendung weg lassen?
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Sirius3
User
Beiträge: 11099
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 18. Oktober 2019, 14:15

@snafu: das geht doch nur bei .exe, .com und .bat
Benutzeravatar
snafu
User
Beiträge: 6013
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 18. Oktober 2019, 15:47

Ich weiß nicht, wann das geändert wurde, aber es geht tatsächlich auch für andere Dateiendungen. Bin hier unter Windows 10 unterwegs und habe es gerade nochmal ausprobiert.

Ist ganz nett, weil man Python-Skripte somit wie normale Befehle ausführen kann. Sofern man die im Unterverzeichnis für Skripte hat und dieser im PATH steht, ist es natürlich von überall aus möglich, sonst nur aus dem gleichen Verzeichnis.
Benutzeravatar
__blackjack__
User
Beiträge: 4863
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 18. Oktober 2019, 18:04

@snafu: Woher weiss Windows denn dann das es sich beispielsweise um Python handelt und nicht um Bash, Perl, Ruby, oder sonst etwas anderes?
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Benutzeravatar
snafu
User
Beiträge: 6013
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 18. Oktober 2019, 19:50

Über den entsprechenden Eintrag zur Endung in der Registry weiß Windows das.
Benutzeravatar
__blackjack__
User
Beiträge: 4863
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 18. Oktober 2019, 21:38

@snafu: Okay, Missverständnis — ich dachte mit Endung weglassen war gemeint die Dateiendung wegzulassen. Also bei der Datei. Nicht beim Aufruf.
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Benutzeravatar
snafu
User
Beiträge: 6013
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Samstag 19. Oktober 2019, 05:12

Ja genau, beim Aufruf. Abspeichern muss man weiterhin mit Endung bzw Windows fügt sie bekanntlich hinzu, wenn man im Dialogfenster für das Speichern den Dateityp angegeben hat. 😌
Antworten