Python per Kommandozeile instalieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Ich versuche gerade, Python per Kommandozeile zu installieren, damit ich es im CI von GitLabnutzen kann. Bisher sieht mein Job so aus:

Code: Alles auswählen

build_exe:
    stage: build
    script:
        - Invoke-WebRequest -Uri https://www.python.org/ftp/python/3.7.6/python-3.7.6-amd64.exe -OutFile python-installer.exe
        - .\python-installer.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
        - python --version
        - pip
    only:
        - tags
    tags:
        - windows
Es wird testweise Python und pip aufgerufen, um zu schauen, ob alles funktioniert. Doch beim Aufruf von python kommt schon die Fehlermeldung, dass der Befehl nicht existieren würde. Der Installer ist durchgelaufen, ohne was auszugeben. Hat da wer eine Idee?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich behaupte mal, dass der Installer zwar gelaufen ist, aber die Aenderung der Pfad-Variable sich erst nach einem Neustart des Kommandozeileninterpreters zeigen wuerde. Ich bin kein Experte in GitLab, aber ggf. kannst du so eine vorbereitende Massnahme in einen frueheren Schritt verlagern. Oder besser noch gleich (so macht man's unter Linux zumindest) einen Container mit den Tools schon installiert benutzen.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Ich habe folgenden Befehl gefunden.

Code: Alles auswählen

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") 
Damit soll es möglich sein, den PATH neuzuladen, was offenbar auch bei vielen funktioniert. Ich habe den Befehl zwischen den Befehl zum installieren und dem python Befehl gepackt. Leider wird Python immer noch nicht gefunden.

An die Container hatte ich auch schon gedacht, aber ich habe keine Ahnung, wie das mit Windows funktioniert.

Hat sonst noch jemand eine Idee?
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Weiß vielleicht wer den absoluten Pfad, unter dem Python hier installiert wird?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum schaust du nicht einfach nach? Wenn du den Installer genau so laufen laesst auf deinem lokalen System, dann sollte dabei doch der gleiche Ort herauskommen. Zumindest kann man die Hypothese mal pruefen. Dann gibt's ggf. weitere Parameter, mit denen du den Installations-Ort kontrollieren kannst (aenhlich zu den anderen Angaben). Und last but not least kannst du natuerlich auch ein skript schreiben, dass find auf der Instanz ausfuehrt, und dir mal anschauen, wo die python.exe gelandet ist.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Hab es jetzt hinbekommen. Die Lösung war, erst auf das Ende der Installation zu warten. Das geschieht nicht automatisch. Hier noch mal der komplette Job, für diejenigen, die es interessiert:

Code: Alles auswählen

stages:
    - build

build_exe:
    stage: build
    script:
        - Invoke-WebRequest -Uri https://www.python.org/ftp/python/3.7.6/python-3.7.6-amd64.exe -OutFile python-installer.exe
        - .\python-installer.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 | Out-Null
        - $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") 
        - pip install -r requirements.txt
        - pip install cx-Freeze
        - python build_exe.py build
    artifacts:
        paths:
            - build
    only:
        - tags
    tags:
        - windows
Antworten