Python funktioniert nicht in der Kommandozeile von Git Bash


235

Python läuft nicht in Git Bash (Windows). Wenn ich Python in die Befehlszeile eingebe, werde ich in eine leere Zeile geführt, ohne zu sagen, dass Python 2.7.10 wie in Powershell eingegeben wurde. Es gibt mir keine Fehlermeldung, aber Python läuft einfach nicht.

Ich habe bereits sichergestellt, dass die Umgebungsvariablen in PATH enthalten sind c:\python27. Was kann ich noch überprüfen?


Eine Sitzung, in der dieses Problem auftritt, sieht folgendermaßen aus:

user@hostname MINGW64 ~
$ type python
python is /c/Python27/python

user@hostname MINGW64 ~
$ python

... dort sitzen, ohne zur Eingabeaufforderung zurückzukehren.


2
"Nichts passiert"? Sie bekommen nicht einmal einen Fehler? (Das heißt: Wenn Sie eine Fehlermeldung erhalten, sollte dies Teil Ihrer Frage sein).
Charles Duffy

@recursive, bash respektiert tatsächlich PATH. (Es hat jedoch eine eigene Version dieser Variablen).
Charles Duffy

11
Ich erhalte keine Fehlermeldung, wenn ich Python eingebe. Es bringt mich nur zu einer leeren Zeile, zeigt aber nicht, dass Python tatsächlich läuft
Caroline Morris

4
@ CharlesDuff, sie machte es klar, Charles, keine Fehlermeldungen. Bash friert einfach ein. Das Einfrieren eines Terminals ist die Fehlermeldung.
Grün

1
@Green, wie aus meiner Antwort hervorgeht, ist dies kein Punkt mehr, an dem es an Klarheit mangelt - und das seit fast einem Jahr nicht mehr. Darüber hinaus war die Frage in diesem Punkt nicht so klar wie jetzt, bis ich sie so bearbeitet habe, dass sie in dem Punkt, der dem Kommentar des OP weiter oben in diesem Thread folgt , eindeutig ist. Überprüfen Sie den Verlauf.
Charles Duffy

Antworten:


360

Geben Sie dies einfach in Ihre Git-Shell unter Windows ein -> alias python='winpty python.exe', das ist alles, und Sie erhalten einen Alias ​​für die ausführbare Python-Datei. Genießen

PS Für eine dauerhafte Aliasaddition siehe unten,

cd ~
touch .bashrc

Öffnen Sie dann .bashrc, fügen Sie Ihren Befehl von oben hinzu und speichern Sie die Datei. Sie müssen die Datei über die Konsole erstellen, oder Sie können sie nicht unter dem richtigen Namen speichern. Sie müssen auch die Shell neu starten, um die Änderung zu übernehmen.


17
Klappt wunderbar.
Green

4
Hinweis: Sie müssen die Python-Funktion quit()verwenden, um den Interpreter zu verlassen.
Anishpatel

5
Sie können auch (den Windows-Standard) ^Z(Strg-Z) + returnzum Beenden verwenden.
Emil Styrke

6
Wenn Sie den Alias ​​auf einen anderen Python als den von Windows festlegen alias python='winpty /c/Python27/python.exe'
möchten,

10
Dies könnte das Beste sein, was ich jemals im Internet gefunden habe.
mdw7326

79

Die nächste Option wird in einer Liste mit Antworten nicht angezeigt, aber ich kann eine interaktive Eingabeaufforderung mit der Taste "-i" erhalten:

$ python -i
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55)
Type "help", "copyright", "credits" or "license" for more information.
>>> 

-i Argument: Wenn ein Skript als erstes Argument übergeben wird oder die Option -c verwendet wird, wechseln Sie nach Ausführung des Skripts oder des Befehls in den interaktiven Modus, auch wenn sys.stdin kein Terminal zu sein scheint. Die PYTHONSTARTUP-Datei wird nicht gelesen. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury

Ist das teurer als alias python = 'winpty python.exe' ?
PYK

1
Dies ist die Option ohne Konfigurationsaufwand, die auf jedem Computer funktioniert.
vav

58

Dies ist ein bekannter Fehler in MSys2, der das von Git Bash verwendete Terminal bereitstellt. Sie können dies umgehen , indem Sie einen Python-Build ohne Unterstützung von ncurses ausführen oder WinPTY wie folgt verwenden:

Um ein Windows-Konsolenprogramm in mintty oder Cygwin sshd auszuführen, stellen Sie console.exe der Befehlszeile voran:

$ build/console.exe c:/Python27/python.exe
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 10 + 20
30
>>> exit()

Die vorgefertigten Binärdateien für msys funktionieren wahrscheinlich mit Git Bash. (Überprüfen Sie, ob es eine neuere Version gibt, wenn seit der Veröffentlichung dieser Antwort viel Zeit vergangen ist!).


Versuchen Sie ab Git für Windows 2.7.1 auch, Folgendes zu verwenden winpty c:Python27/python.exe: WinPTY kann sofort geliefert werden.


2
Können Sie bitte erklären, build/console.exe c:/Python27/python.exeob dies in der GitMsys-Konsole oder auf andere Weise ausgeführt werden soll?
0leg

@ h3d0, ja, im Terminal. Dies setzt natürlich voraus, dass buildes sich um das Verzeichnis console.exehandelt, in dem sich das Verzeichnis befindet. Aktualisieren Sie den Pfad entsprechend, je nachdem, wo / wie Sie ihn tatsächlich installiert haben.
Charles Duffy

1
@ h3d0 Ja, es ist zusätzliche Software; Meine Antwort enthält einen Link.
Charles Duffy

7
Ich denke, Sie können es als verwenden winpty c:/Python27/python.exe, ohne etwas zusätzliches zu tun. Das Dienstprogramm winpty.exe finden Sie unter Git \ usr \ bin. Ich benutze Git für Windows v2.7.1
Xun Yang

1
@XunYang, ... ist jetzt winpty gebündelt? Nett! Entsprechend bearbeitet.
Charles Duffy

47

Ich bin Windows 10-Benutzer und habe GIT auf meinem System installiert , indem ich nur die Standardeinstellungen akzeptiert habe.

Nachdem ich die obigen Antworten gelesen hatte, bekam ich 2 eigene Lösungen und diese 2 Lösungen funktionieren perfekt mit GIT- Bash und erleichtern mir das Ausführen von Python-Anweisungen mit GIT- Bash.

Ich hänge 3 Bilder meines GIT- Bash-Terminals an. 1. mit Problem und letzteres 2 als Lösung.

PROBLEM - Der Cursor wartet nur, nachdem er den pythonBefehl gedrückt hat

Geben Sie hier die Bildbeschreibung ein

LÖSUNG 1

Führen Sie winpty <path-to-python-installation-dir>/python.exeauf GIT bash Terminal.

Hinweis: Verwenden Sie C:\Users\Adminin GIT- Bash nicht den gleichen Pfadstil, sondern stattdessen /C/Users/Admin.

In meinem Fall habe ich einen winpty /C/Users/SJV/Anaconda2/python.exeBefehl für GIT Bash ausgeführt

Oder wenn Sie Ihren Benutzernamen nicht kennen, führen Sie ihn auswinpty /C/Users/$USERNAME/Anaconda2/python.exe

Geben Sie hier die Bildbeschreibung ein

LÖSUNG 2

Einfach tippen python -iund fertig.

Geben Sie hier die Bildbeschreibung ein

Vielen Dank.


2
Ich habe festgestellt, dass dies winptyauch mit dem Windows Python Launcher funktioniert. Sie müssen also nur z. B. alias py='winpty py'in Ihrer .bashrc-Datei arbeiten und dann zum Normalzustand zurückkehren.
Karl Knechtel

Ja, das liegt an dir, wie gehst du mit Dingen um, um dein Leben besser zu machen?
Hygull

9

Versuchen Sie python -istattdessen python, es ist eine Cursorsache.


8

Zusätzlich zur Antwort von @ Charles-Duffy können Sie winpty direkt verwenden, ohne etwas extra installieren / herunterladen zu müssen. Lauf einfach winpty c:/Python27/python.exe. Das Dienstprogramm winpty.exe finden Sie unter Git \ usr \ bin. Ich verwende Git für Windows v2.7.1

Die vorgefertigten Binärdateien von @ Charles-Duffy sind Version 0.1.1 (entsprechend dem Dateinamen), während die enthaltene Version 0.2.2 ist


8

Git Bash Workaround - Starten Sie Python 2 und Python 3 mit Aliasnamen

HI . Dies ist (für mich) die beste Lösung, um Python (Python 2.7 und Python 3.x) direkt von Git Bash unter Win 10 auszuführen => Aliase in die Aliase-Datei einzufügen, für die Git Bash verwendet.

Die Git Bash-Aliase-Datei lautet aliases.sh . Es liegt in:

C:\path where you installed Git\etc\profile.d\aliases.sh

1) Öffnen Sie (mit einem Texteditor wie Atom oder einem anderen) die aliases.sh

Zum Beispiel: In meinem Fall ist die Datei in C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Fügen Sie Ihren Alias ​​für Python hinzu

In meinem Fall sind die python.exe installiert in:

C:\Networking\Network Automation\Python 2.7\python.exe
C:\Networking\Network Automation\Python 3.7\python.exe

So Sie 2 Aliase erstellen müssen, einen für Python 2 ( I genannt python2 ) und die andere für Python 3 ( ich gerade genannt Python Linux - Dateistruktur Git Bash verwendet) , so dass Sie das ändern müssen „\“ für „/“ und wenn Sie Haben Sie einen Pfad wie mein Beispiel Netzwerkautomatisierung , den Sie mit ""

"Netzwerkautomatisierung" , zum Beispiel.

winpty ist der magische Befehl, der die ausführbare Datei aufruft.

Fügen Sie diese Zeilen also am Anfang von aliases.sh hinzu

alias python2='winpty C/Networking/"Network Automation"/"Python 2.7"/python.exe'
alias python='winpty C/Networking/"Network Automation"/"Python 3.7"/python.exe'

3) Fügen Sie andere Aliase hinzu oder ändern Sie sie (wenn Sie möchten)

Ich habe auch den ll- Alias geändert , um alle Dateien und in einer von Menschen lesbaren Liste anzuzeigen:

alias ll='ls -lah'

4) Speichern Sie die Datei aliases.sh


5) OK !!! Schließen Sie Ihren Git Bash und starten Sie ihn neu

Jetzt können Sie permanent beide Python direkt von der Git-Shell aus starten, indem Sie einfach schreiben

$ python -> Starten Sie Python 3

$ python2 -> Starten Sie Python 2

$ ll -> gibt ein ls-lah ein, um schnell Ihre detaillierte Dateiliste anzuzeigen

Prost, Harry


5

Sie können das Ziel für die Git Bash-Verknüpfung ändern von:

"C:\Program Files\Git\git-bash.exe" --cd-to-home 

zu

"C:\Program Files\Git\git-cmd.exe" --no-cd --command=usr/bin/bash.exe -l -i

Auf diese Weise startete ConEmu Git Bash (Version 16). Die neueste Version startet es normal und so bin ich dorthin gekommen ...


Das hat bei mir funktioniert 👍. Erwähnenswert, was die Argumente von bash.exe bewirken? Manpage sagt -l: -iLassen Sie Bash so tun, als ob es als Login-Shell aufgerufen worden wäre : Wenn die Optionen -i vorhanden sind, ist die Shell interaktiv
Tag

Vor einiger Zeit funktionierte ConEmu ohne Winpty einwandfrei und ich vergaß völlig, was ich tat. Danke, das hat genauso funktioniert wie vorher!
Chaz

5

Typ: 'Winpty Python' und es wird funktionieren

gitbash hat einige Probleme beim Ausführen eines Befehls, der mit Python beginnt. Dies gilt auch für alle python manage.py-Befehle. Beginnen Sie immer mit 'winpty python manage.py'. Zumindest funktioniert das bei mir. Windows 10 ausführen.


2

Zusätzlich zu @Vitaliy Terziev Antwort

Versuchen Sie, touch .bash_profileder Datei einen Alias ​​hinzuzufügen.


1
Ich habe .bashrc verwendet, aber als ich Git Bash öffnete, erhielt ich eine Warnmeldung, dass bashrc ohne .bash_profile existiert. Ich habe .bashrc in .bash_profile umbenannt und jetzt ging die Warnung weg. Vielen Dank.
JustinDanielson

2

2 Problemumgehungen statt einer Lösung: In meinem Git Bash hängt der folgende Befehl und ich erhalte die Eingabeaufforderung nicht zurück:

% python

Also benutze ich einfach:

% winpty python

Wie einige Leute oben bemerkt haben, können Sie auch verwenden:

% python -i

.


1

Ich verwende MINGW64 über Visual Studio Code unter Windows 10 und versuche zu installieren node-sass(was erforderlich ist python2). Ich folgte felixrieseberg / windows-build-tools # 56 auf Github, was mein Problem löste.

Dies ist ein Sonderfall, aber ich poste, falls jemand das gleiche Problem hat:

npm --add-python-to-path='true' --debug install --global windows-build-tools

Dadurch werden Python und andere erforderliche Build-Tools installiert %USERPROFILE%\.windows-build-tools\python27.


1

Für Python Version 3.7.3 in vscode mit gitbash als Standardterminal habe ich mich eine Weile damit befasst und dann den Ratschlägen von @Vitaliy Terziev gefolgt, den Alias ​​zu .bashrc hinzuzufügen, jedoch mit der folgenden Spezifikation:

alias python = '/ c / Users / mein Benutzername / AppData / Local / Programs / Python / Python37 / python.exe' '

Beachten Sie die Kombination aus einfachen und doppelten Anführungszeichen aufgrund von Leerzeichen für "Mein Benutzername".

Für mich konnte "winpty" den Python-Pfad in vscode nicht auflösen.


0

Ein weiteres Beispiel für dieses Problem ist die Verwendung der AWS Elastic Beanstalk-Befehlszeilenschnittstelle (awsebcli, eb cli) aus der Git-Bash (MINGW64, Mintty) in Windows (unter Verwendung der Git-Version 2.19.0.windows.1).

Ich poste dies nur, weil ich eine Weile gebraucht habe, um hier zu landen und nach eb-clibestimmten Themen zu suchen .

Befehle wie eb initoder eb config save, für die Benutzereingaben erforderlich sind, scheinen ein Einfrieren / Hängen zu verursachen. In Wirklichkeit wird die Konsole vermutlich nicht mit dem Text aktualisiert, in dem Benutzereingaben angefordert werden. Außerdem wird eb deployder Konsolentext erst nach Abschluss des Befehls aktualisiert, sodass ich erst nach Abschluss Fortschrittsaktualisierungen sehe.

Wie im Git für Windows- Versionshinweise (für Version 2.19.0) und z. B. in der Antwort von Xun Yang erwähnt , muss eine Problemumgehung ausgeführt werden

winpty eb <command>(statt nur eb <command>)

Eine Alternative, wie in diesem Git für Windows-Problem vorgeschlagen , könnte darin bestehen, die native Windows-Konsole anstelle von Mintty zu verwenden (Option während der Git-Installation).


0

Das, was für mich funktioniert hat, ist, wie bereits in diesen großartigen Antworten oben erwähnt, der Alias ​​wie folgt: (Ich verwende Anaconda, also finde zuerst, wo sich der Python-Pfad befindet, und füge ihn dann dem Alias ​​bei Git Bash hinzu.) 1. Auf dem Anaconda-Terminal starte ich: where python 2. Auf dem Git-Bash starte ich: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Fertig. Python wird im Git Bash mithilfe des Alias ​​definiert.

Vielen Dank an (Vitaliy Terziev & Hygull) für ihre sehr hilfreichen Antworten.


0
  1. python.exe -ifunktioniert, hat aber Probleme beim Verlassen des interaktiven Modus durch Senden von "^ Z" (STRG + Z). Also, scheint besser winpty python.exein Git Bash für Windows zu verwenden.

  2. Verwenden Sie das ~/binVerzeichnis, um eine Wrap- / Referenzdatei (wie ~/bin/python) zu erstellen, auf die überall zugegriffen werden kann (Sie können auch andere Versionsreferenzen wie verwenden ~/bin/python37).
    Code in der Datei:

#!/usr/bin/env bash
# maybe declare env vars here like
# export PYTHONHOME=/c/Users/%USERNAME%/.python/Python36
# export PATH="${PATH}:/c/Users/%USERNAME%/.python/Python36"

# replace %USERNAME%,
# or use "~" instead of "/c/Users/%USERNAME%" if it works
winpty /c/Users/%USERNAME%/.python/Python36/python.exe ${@}

Ich mag diese "magischen" Aliase einfach nicht, die man immer vergisst, woher sie kommen, und in einigen Fällen manchmal zu Problemen führt.

  1. Verwenden Sie ~/bin/pythonDatei und -iParameter:
#!/usr/bin/env bash
if [ -z "${@}" ]; then
    # empty args, use interactive mode
    /c/Users/%USERNAME%/.python/Python36/python.exe -i
else
    /c/Users/%USERNAME%/.python/Python36/python.exe ${@}
fi

19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820)- Antwortbeispiel nach dem Senden ^Zim interaktiven Modus ausgeführt vonpython.exe -i
Kirby

0

Geben Sie den Befehl PY anstelle von Python ein. Aufrufen des Interpreters (python.org).


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.