Python nie działa w linii poleceń git bash

236

Python nie będzie działał w git bash (Windows). Kiedy wpisuję python w wierszu poleceń, zabiera mnie do pustej linii, nie mówiąc, że wszedł do Python 2.7.10, podobnie jak robi to w PowerShell. Nie wyświetla mi komunikatu o błędzie, ale Python po prostu nie działa.

Już upewniłem się, że uwzględniono zmienne środowiskowe w PATH c:\python27. Co jeszcze mogę sprawdzić?


Sesja, w której występuje ten problem, wygląda następująco:

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

user@hostname MINGW64 ~
$ python

... siedzenie tam bez powrotu do monitu.

Caroline Morris
źródło
2
"Nic się nie dzieje"? Nie masz nawet błędu? (To znaczy: jeśli pojawi się komunikat o błędzie, to powinno być częścią twojego pytania).
Charles Duffy,
@recursive, bash rzeczywiście szanuje ŚCIEŻKĘ. (Ma jednak własną wersję tej zmiennej).
Charles Duffy,
11
Nie pojawia się komunikat o błędzie podczas pisania w Pythonie. Po prostu zabiera mnie do pustej linii, ale nie pokazuje, że python faktycznie działa
Caroline Morris
4
@CharlesDuff, wyjaśniła, Charles, żadnych komunikatów o błędach. Bash po prostu się zawiesza. Zamrożenie terminala to komunikat o błędzie.
Zielony,
1
@Green, co powinno być oczywiste z mojej odpowiedzi, nie jest to już kwestia braku jasności - i nie było tak przez większą część roku. Co więcej, pytanie nie było tak jasne w tej kwestii, jak teraz, dopóki nie zredagowałem go, aby uczynić go jednoznacznym w kwestii następującej po komentarzu OP wcześniej w tym wątku; sprawdź historię.
Charles Duffy

Odpowiedzi:

361

Po prostu wpisz to w swojej powłoce git w Windows -> alias python='winpty python.exe', to wszystko i będziesz miał alias do pliku wykonywalnego Pythona. Cieszyć się

PS Aby dodać stałe aliasy, patrz poniżej,

cd ~
touch .bashrc

następnie otwórz .bashrc, dodaj polecenie z góry i zapisz plik. Musisz utworzyć plik za pomocą konsoli lub nie możesz zapisać go pod właściwą nazwą. Musisz także zrestartować powłokę, aby zastosować zmianę.

Witalij Terziev
źródło
17
Działa jak marzenie.
Green
4
Uwaga: Będziesz musiał użyć funkcji Python quit(), aby uciec z interpretera.
anishpatel
5
Możesz także użyć (standard Windows) ^Z(ctrl-Z) +, returnaby wyjść.
Emil Styrke
6
Również jeśli chcesz ustawić alias na „inny” python niż ten z Windows, możesz ustawić w pełni kwalifikowaną ścieżkę do niego, stosując następującą składnięalias python='winpty /c/Python27/python.exe'
ScottMcC
10
To może być najlepsza rzecz, jaką kiedykolwiek znalazłem w Internecie.
mdw7326,
79

Nie widzę następnej opcji na liście odpowiedzi, ale mogę uzyskać interaktywny monit za pomocą klawisza „-i”:

$ 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.
>>> 
vav
źródło
-i argument: Gdy skrypt jest przekazywany jako pierwszy argument lub używana jest opcja -c, po wykonaniu skryptu lub polecenia przejdź do trybu interaktywnego, nawet jeśli sys.stdin nie wydaje się terminalem. Plik PYTHONSTARTUP nie został odczytany. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury
Czy jest to bardziej kosztowne niż alias python = 'winpty python.exe' ?
PYK
1
jest to opcja z zerowym nakładem pracy na konfigurację, która działa na dowolnym komputerze.
vav
58

Jest to znany błąd w MSys2, który zapewnia terminal używany przez Git Bash. Możesz obejść ten problem, uruchamiając kompilację Python bez obsługi ncurses lub używając WinPTY , używanego w następujący sposób:

Aby uruchomić program konsoli Windows w mennicy lub Cygwin sshd, dodaj polecenie console.exe do wiersza polecenia:

$ 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()

Te pliki binarne prekompilowanymi Msys mogą pracować z Git Bash. (Sprawdź, czy jest dostępna nowsza wersja, jeśli upłynęło dużo czasu od opublikowania tej odpowiedzi!).


Począwszy od Git dla Windows 2.7.1, spróbuj także użyć winpty c:Python27/python.exe; WinPTY może być dołączony od razu po wyjęciu z pudełka.

Charles Duffy
źródło
2
Czy możesz wyjaśnić build/console.exe c:/Python27/python.exe- czy należy to uruchomić w konsoli GitMsys, czy w jakikolwiek inny sposób?
0leg
@ h3d0, tak, wewnątrz terminala. Oczywiście zakłada to, że buildjest to katalog console.exe; odpowiednio zaktualizuj ścieżkę w zależności od tego, gdzie / jak ją zainstalowałeś.
Charles Duffy
1
@ h3d0 Tak, jest to dodatkowe oprogramowanie; moja odpowiedź zawiera link.
Charles Duffy
7
Myślę, że możesz go użyć jako winpty c:/Python27/python.exe, bez robienia niczego dodatkowego. Narzędzie winpty.exe można znaleźć na Git \ usr \ bin. Używam Git dla Windows v2.7.1
Xun Yang
1
@XunYang, ... pakiet Winpty jest teraz w pakiecie? Miły! Odpowiednio zredagowane.
Charles Duffy
47

Jestem użytkownikiem systemu Windows 10 i zainstalowałem GIT w moim systemie, akceptując tylko wartości domyślne.

Po przeczytaniu powyższych odpowiedzi otrzymałem 2 rozwiązania dla siebie i te 2 rozwiązania doskonale działają na GIT bash i ułatwiają mi wykonywanie instrukcji Python na GIT bash.

Dołączam 3 zdjęcia mojego terminalu GIT bash. Pierwszy z problemem, a drugi 2 jako rozwiązania.

PROBLEM - Kursor czeka tylko po naciśnięciu pythonpolecenia

wprowadź opis zdjęcia tutaj

ROZWIĄZANIE 1

Wykonaj winpty <path-to-python-installation-dir>/python.exena terminalu GIT bash.

Uwaga: Nie używaj C:\Users\Adminstylu ścieżki jak w GIT bash, zamiast tego użyj /C/Users/Admin.

W moim przypadku wykonałem winpty /C/Users/SJV/Anaconda2/python.exepolecenie na GIT bash

Lub jeśli nie znasz swojej nazwy użytkownika, uruchom jąwinpty /C/Users/$USERNAME/Anaconda2/python.exe

wprowadź opis zdjęcia tutaj

ROZWIĄZANIE 2

Wystarczy wpisać python -ii to wszystko.

wprowadź opis zdjęcia tutaj

Dzięki.

Hygull
źródło
2
Zauważyłem, że winptybędzie również działać z Windows Python Launcher, więc wszystko czego potrzebujesz to np. alias py='winpty py'W .bashrc, a następnie wróć do normalności.
Karl Knechtel
Tak, to zależy od ciebie, jak zarządzasz rzeczami, aby Twoje życie było lepsze.
hygull
9

Spróbuj python -izamiast tego python, to kursor.

James
źródło
8

Oprócz odpowiedzi @ Charles-Duffy możesz bezpośrednio używać winpty bez instalowania / pobierania czegokolwiek dodatkowego. Po prostu biegnij winpty c:/Python27/python.exe. Narzędzie winpty.exe można znaleźć na Git \ usr \ bin. Używam Git dla Windows v2.7.1

Wbudowane pliki binarne z @ Charles-Duffy to wersja 0.1.1 (zgodnie z nazwą pliku), a dołączony to 0.2.2

Xun Yang
źródło
8

Obejście Git Bash - Uruchom Python 2 i Python 3 z aliasami

HI . Jest to (dla mnie) najlepsze rozwiązanie do uruchamiania zarówno Pythona (Python 2.7, jak i Python 3.x) bezpośrednio z Git Bash w Win 10 => dodawanie aliasów do pliku aliasów, do którego używa Git Bash.

Plik aliasów Git Bash to aliases.sh . To jest zlokalizowane w:

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

1) Otwórz (za pomocą edytora tekstu, takiego jak Atom lub inny) aliases.sh

na przykład: w moim przypadku plik jest w C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Dodaj swój alias do Pythona

W moim przypadku to python.exe są instalowane w:

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

Musisz więc utworzyć 2 aliasy, jeden dla Python 2 ( nazwałem python2 ), a drugi dla Python 3 ( nazwałem tylko python ) Git Bash używa struktury plików linux, więc musisz zmienić „\” na „/”, a jeśli mam ścieżkę taką jak mój przykład Automatyzacja sieci, którą umieściłeś za pomocą „”

„Automatyzacja sieci” , np.

winpty to magiczne polecenie, które wywoła plik wykonywalny.

Dodaj więc te linie na początku aliases.sh

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) Dodaj lub zmodyfikuj inne aliasy (jeśli chcesz)

Zmodyfikowałem również alias ll, aby pokazać wszystkie pliki i listę czytelną dla ludzi:

alias ll='ls -lah'

4) Zapisz plik aliases.sh


5) OK !!! zamknij i uruchom ponownie Git Bash

Teraz na stałe możesz uruchomić oba Pythona bezpośrednio z powłoki Git po prostu pisząc

$ python -> uruchom Python 3

$ python2 -> uruchom Python 2

$ ll -> wprowadza ls -lah, aby szybko wyświetlić szczegółową listę plików

Na zdrowie, Harry

Złupić
źródło
5

Możesz zmienić cel skrótu Git Bash z:

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

do

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

W ten sposób ConEmu uruchomił git bash (wersja 16). Najnowsza wersja uruchamia się normalnie i tak się tam dostałem ...

Igonato
źródło
To działało dla mnie 👍. Warto zauważyć, co robią argumenty bash.exe? strona podręcznika mówi -l: Spraw, aby bash działał tak, jakby został wywołany jako powłoka logowania -i: Jeśli opcja -i jest obecna, powłoka jest interaktywna
Dzień
Kiedyś ConEmu działał dobrze bez winpty jakiś czas temu i zupełnie zapomniałem, co zrobiłem. Dzięki temu działało tak, jak było wcześniej!
Chaz
5

wpisz: 'winpty python' i będzie działać

gitbash ma pewne problemy podczas uruchamiania dowolnego polecenia, które zaczyna się od Pythona. dotyczy to również wszelkich poleceń manage.py dla Pythona. Zawsze zaczynaj od „winpty python manage.py” Przynajmniej to działa dla mnie. Z systemem Windows 10.

Bryce Regan LeFevre
źródło
2

Oprócz odpowiedzi @Vitaliy Terziev

spróbuj, touch .bash_profilea następnie dodaj alias do pliku.

henjiFire
źródło
1
Użyłem .bashrc, ale kiedy otworzyłem Git Bash, dostałem komunikat ostrzegawczy, że bashrc istnieje bez pliku .bash_profile. Zmieniłem nazwę .bashrc na .bash_profile i teraz ostrzeżenie zniknęło. Dzięki.
JustinDanielson
2

2 obejścia zamiast rozwiązania: w moim Git Bash następuje zawieszenie następującego polecenia i nie otrzymuję z powrotem monitu:

% python

Więc po prostu używam:

% winpty python

Jak niektórzy zauważyli powyżej, możesz także użyć:

% python -i

.

BabarBaig
źródło
1

Używam MINGW64 przez Visual Studio Code na Windows 10 i próbuję zainstalować node-sass(co wymaga python2). Śledziłem felixrieseberg / windows-build-tools # 56 na Github, który rozwiązał mój problem.

To jest szczególny przypadek, ale piszę na wypadek, gdyby ktoś miał ten sam problem:

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

Spowoduje to zainstalowanie Pythona i innych wymaganych narzędzi do kompilacji %USERPROFILE%\.windows-build-tools\python27.

Blaskovicz
źródło
1

W przypadku python w wersji 3.7.3 w vscode z gitbash jako domyślnym terminalem miałem do czynienia z tym przez jakiś czas, a następnie postępowałem zgodnie z radą @Vitaliy Terziev dodawania aliasu do .bashrc, ale z następującą specyfikacją:

alias python = '„/ c / Users / my user name / AppData / Local / Programs / Python / Python37 / python.exe”'

Zwróć uwagę na kombinację pojedynczych i podwójnych cudzysłowów ze względu na spacje „moja nazwa użytkownika”.

Dla mnie „winpty” nie mógł rozwiązać ścieżki pythona w vscode.

Charlyboy
źródło
0

Innym przykładem tego problemu jest użycie interfejsu wiersza poleceń AWS Elastic Beanstalk (awsebcli, eb cli) z git bash (MINGW64, Mintty) w systemie Windows (przy użyciu git w wersji 2.19.0.windows.1).

Po prostu to publikuję, ponieważ zajęło mi trochę czasu, aby skończyć tutaj, szukając eb-clikonkretnych problemów.

Polecenia takie jak eb initlub eb config save, wymagające wprowadzenia danych przez użytkownika, wydają się powodować zawieszanie / zawieszanie się. W rzeczywistości wydaje mi się, że konsola nie jest aktualizowana tekstem wymagającym wprowadzenia danych przez użytkownika. Ponadto eb deployaktualizuje tekst konsoli tylko po zakończeniu polecenia, więc nie widzę aktualizacji postępu aż do zakończenia.

Jak wspomniano w informacjach o wydaniu git dla systemu Windows (dla wersji 2.19.0) i np. W odpowiedzi Xun Yang , należy zastosować obejście

winpty eb <command>(zamiast po prostu eb <command>)

Alternatywą, jak zasugerowano w tym git dla problemu z Windows , może być użycie natywnej konsoli Windows zamiast mintty (opcja podczas instalacji gita).

djvg
źródło
0

Ten, który zadziałał dla mnie, jest, jak wspomniano wcześniej w tych świetnych odpowiedziach powyżej, alias w następujący sposób: (Używam anakondy, więc najpierw znajdź ścieżkę pytona, a następnie dodaj ją do aliasu na git bash). 1. na terminalu anakonda uruchamiam: where python 2. na git bash uruchamiam: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Gotowe. Python jest zdefiniowany w git Bash przy użyciu aliasu.

Podziękowania dla (Vitaliy Terziev & hygull) za ich bardzo pomocne odpowiedzi.

HassanSh__3571619
źródło
0
  1. python.exe -idziała, ale wystąpiły problemy z wyjściem z trybu interaktywnego, wysyłając „^ Z” (CTRL + Z). Wydaje się więc, że lepiej go używać winpty python.exew Git Bash na Windows.

  2. Użyj ~/binkatalogu, aby utworzyć plik zawijania / odwołania (podobny ~/bin/python), który będzie dostępny wszędzie (możesz użyć innego odwołania do wersji, takiego jak ~/bin/python37).
    Kod w pliku:

#!/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 ${@}

Po prostu nie lubię tych „magicznych” aliasów, o których zawsze zapominasz, skąd się biorą, a czasami prowadzą do problemów w niektórych przypadkach.

  1. Użyj ~/bin/pythonpliku i -iparametru:
#!/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
Kirby
źródło
19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820)- przykład odpowiedzi po wysłaniu ^Zw trybie interaktywnym prowadzony przezpython.exe -i
Kirby
0

Wpisz polecenie PY zamiast Python. Wywoływanie interpretera (python.org).

Alyf
źródło