Python non funziona nella riga di comando di git bash


236

Python non funzionerà in git bash (Windows). Quando scrivo python nella riga di comando, mi porta a una riga vuota senza dire che è entrato in Python 2.7.10 come fa in Powershell. Non mi dà un messaggio di errore, ma Python non funziona.

Ho già fatto in modo che le variabili ambientali in PERCORSO fossero incluse c:\python27. Cos'altro posso controllare?


Una sessione in cui si verifica questo problema è simile alla seguente:

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

user@hostname MINGW64 ~
$ python

... seduto lì senza tornare al prompt.


2
"Non succede niente"? Non ricevi nemmeno un errore? (Vale a dire: se ricevi un messaggio di errore, questo dovrebbe far parte della tua domanda).
Charles Duffy,

@recursive, bash rispetta davvero PATH. (Ha una sua versione di quella variabile, però).
Charles Duffy,

11
Non visualizzo un messaggio di errore quando digito Python. Mi porta solo a una riga vuota, ma non mostra che Python sia effettivamente in esecuzione
Caroline Morris,

4
@CharlesDuff, ha chiarito, Charles, nessun messaggio di errore. Bash si blocca. Il blocco di un terminale è il messaggio di errore.
Green

1
@Verde, come dovrebbe essere ovvio dalla mia risposta, non è più un punto privo di chiarezza - e non è stato per la parte migliore di un anno. Inoltre, la domanda non era chiara su questo punto come lo è ora fino a quando non l'ho modificata per renderla inequivocabile sul punto che segue il commento del PO in precedenza in questo thread; controlla la cronologia.
Charles Duffy,

Risposte:


361

Basta inserire questo nella tua shell git su windows -> alias python='winpty python.exe', questo è tutto e avrai un alias nell'eseguibile python. Godere

PS Per l'aggiunta permanente di alias vedi sotto,

cd ~
touch .bashrc

quindi apri .bashrc, aggiungi il tuo comando dall'alto e salva il file. È necessario creare il file tramite la console o non è possibile salvarlo con il nome corretto. È inoltre necessario riavviare la shell per applicare la modifica.


17
Funziona come un fascino.
Green

4
Nota: dovrai usare la funzione Python quit()per uscire dall'interprete.
anishpatel

5
Puoi anche usare (lo standard di Windows) ^Z(ctrl-Z) + returnper uscire.
Emil Styrke,

6
Inoltre, se si desidera impostare l'alias su un pitone "diverso" rispetto a quello di Windows, è possibile impostare un percorso completo utilizzando la seguente sintassialias python='winpty /c/Python27/python.exe'
ScottMcC

10
Questa potrebbe essere la cosa migliore che abbia mai trovato su Internet in assoluto.
mdw7326,

79

Non vedo la prossima opzione in un elenco di risposte, ma posso ottenere un prompt interattivo con il tasto "-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.
>>> 

-i argomento: quando uno script viene passato come primo argomento o viene utilizzata l'opzione -c, accedere alla modalità interattiva dopo aver eseguito lo script o il comando, anche quando sys.stdin non sembra essere un terminale. Il file PYTHONSTARTUP non viene letto. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury

È più costoso di alias python = 'winpty python.exe' ?
PYK,

1
questa è l'opzione con zero sforzo di configurazione che funziona su qualsiasi computer.
vav

58

Questo è un bug noto in MSys2, che fornisce il terminale utilizzato da Git Bash. Puoi aggirarlo eseguendo una build Python senza il supporto di ncurses o usando WinPTY , usato come segue:

Per eseguire un programma console di Windows in mintty o Cygwin sshd, anteporre console.exe alla riga di comando:

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

È probabile che i binari predefiniti per msys funzionino con Git Bash. (Controlla se esiste una versione più recente se è trascorso molto tempo da quando è stata pubblicata questa risposta!).


A partire da Git per Windows 2.7.1, prova anche a usare winpty c:Python27/python.exe; WinPTY può essere incluso immediatamente.


2
Potete per favore spiegare il build/console.exe c:/Python27/python.exe: è necessario eseguirlo nella console GitMsys o in altro modo?
0leg

@ h3d0, sì, all'interno del terminale. Naturalmente, questo presuppone che buildsia la directory in cui si console.exetrova; aggiorna il percorso in modo appropriato a seconda di dove / come lo hai installato.
Charles Duffy,

1
@ h3d0 Sì, è un software aggiuntivo; la mia risposta include un link.
Charles Duffy,

7
Penso che puoi usarlo come winpty c:/Python27/python.exe, senza fare altro. L'utility winpty.exe è disponibile in Git \ usr \ bin. Sto usando Git per Windows v2.7.1
Xun Yang

1
@XunYang, ... winpty è ora in bundle? Bello! Modificato in modo appropriato.
Charles Duffy,

47

Sono un utente di Windows 10 e ho installato GIT nel mio sistema semplicemente accettando le impostazioni predefinite.

Dopo aver letto le risposte precedenti, ho ottenuto 2 soluzioni per me e queste 2 soluzioni funzionano perfettamente su GIT bash e mi facilitano l'esecuzione di istruzioni Python su GIT bash.

Allego 3 immagini del mio terminale GIT bash. 1o con problema e quest'ultimo 2 come soluzioni.

PROBLEMA - Il cursore è in attesa dopo aver premuto il pythoncomando

inserisci qui la descrizione dell'immagine

SOLUZIONE 1

Eseguire winpty <path-to-python-installation-dir>/python.exesul terminale bash GIT .

Nota: non utilizzare lo C:\Users\Adminstile del percorso simile in GIT bash, invece utilizzare/C/Users/Admin .

Nel mio caso, ho eseguito il winpty /C/Users/SJV/Anaconda2/python.execomando su GIT bash

O se non conosci il tuo nome utente, eseguilowinpty /C/Users/$USERNAME/Anaconda2/python.exe

inserisci qui la descrizione dell'immagine

SOLUZIONE 2

Basta digitare python -ie basta.

inserisci qui la descrizione dell'immagine

Grazie.


2
Ho scoperto che winptyfunzionerà anche con Windows Python Launcher, quindi tutto ciò di cui hai bisogno è ad es. alias py='winpty py'Nel tuo .bashrc e poi tornare alla normalità.
Karl Knechtel,

Sì, dipende da te, come gestisci le cose per migliorare la tua vita.
Hygull,

9

Prova python -iinvece di python, è una cosa cursore.


8

Oltre alla risposta di @ Charles-Duffy, puoi utilizzare winpty direttamente senza installare / scaricare nulla in più. Corriwinpty c:/Python27/python.exe . L'utility winpty.exe è disponibile in Git \ usr \ bin. Sto usando Git per Windows v2.7.1

I binari predefiniti di @ Charles-Duffy sono la versione 0.1.1 (in base al nome del file), mentre quello incluso è 0.2.2


8

Soluzione alternativa Git Bash: avvia Python 2 e Python 3 con alias

HI . Questa è (per me) la migliore soluzione per eseguire sia Python (Python 2.7 e Python 3.x) direttamente da Git Bash su Win 10 => aggiungendo alias nel file degli alias che Git Bash utilizza.

Il file degli alias Git Bash è aliases.sh . É situato in:

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

1) Apri (con un editor di testo come Atom o altro) l'aliases.sh

ad esempio: nel mio caso il file è in C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Aggiungi il tuo alias per Python

Nel mio caso i python.exe sono installati in:

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

Quindi devi creare 2 alias, uno per Python 2 ( ho chiamato python2 ) e l'altro per Python 3 ( ho chiamato solo python ) Git Bash usa la struttura dei file linux quindi devi cambiare "\" per "/" e se avere un percorso come il mio esempio Network Automation, lo metti con ""

"Network Automation" , ad es.

winpty è il comando magico che chiamerà l'eseguibile.

Quindi aggiungi queste righe all'inizio di 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) Aggiungi o modifica altri alias (se vuoi)

Ho modificato anche le LL alias per mostrare tutti i file e in un elenco leggibile:

alias ll='ls -lah'

4) Salvare il file aliases.sh


5) OK !!! chiudi e riavvia il tuo Git Bash

Ora, in modo permanente è possibile avviare entrambi Python direttamente dalla shell Git solo scrivendo

$ python -> avvia Python 3

$ python2 -> avvia Python 2

$ ll -> entra in ls -lah per mostrare rapidamente l'elenco dei file dettagliato

Saluti, Harry


5

Puoi cambiare target per il collegamento Git Bash da:

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

per

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

Questo è il modo in cui ConEmu utilizzava git bash (versione 16). La versione recente si avvia normalmente ed è come ci sono arrivato ...


Questo ha funzionato per me 👍. Vale la pena notare cosa fanno gli argomenti bash.exe? la pagina man dice -l: Fai in modo che bash si comporti come se fosse stato invocato come shell di login -i: Se sono presenti le opzioni -i, la shell è interattiva
Giorno

Un tempo fa ConEmu funzionava bene senza winpty e mi ero completamente dimenticato di cosa avevo fatto. Grazie, ha funzionato esattamente come prima!
Chaz

5

digitare: 'winpty python' e funzionerà

gitbash ha dei problemi quando si esegue qualsiasi comando che inizia con python. questo vale anche per tutti i comandi python manage.py. Inizia sempre con 'winpty python manage.py' Almeno questo è ciò che funziona per me. Esecuzione di Windows 10.


2

Oltre alla risposta @Vitaliy Terziev

provare touch .bash_profilee quindi aggiungere alias nel file.


1
Ho usato .bashrc, ma quando ho aperto Git Bash, ho ricevuto un messaggio di avvertimento che bashrc esiste w / oa .bash_profile. Ho rinominato .bashrc in .bash_profile e ora l'avviso è scomparso. Grazie.
JustinDanielson,

2

2 soluzioni alternative, piuttosto che una soluzione: Nel mio Git Bash, il seguente comando si blocca e non ricevo il prompt:

% python

Quindi uso solo:

% winpty python

Come alcune persone hanno notato sopra, puoi anche usare:

% python -i

.


1

Sto usando MINGW64 tramite Visual Studio Code su Windows 10 e sto provando a installare node-sass(che richiede python2). Ho seguito felixrieseberg / windows-build-tools # 56 su Github che ha risolto il mio problema.

Questo è un caso speciale, ma sto pubblicando nel caso qualcuno abbia lo stesso problema:

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

Questo installa python e altri strumenti di compilazione richiesti su %USERPROFILE%\.windows-build-tools\python27.


1

Per python versione 3.7.3 in vscode con gitbash come terminale predefinito, mi sono occupato di questo per un po 'e poi ho seguito i consigli di @Vitaliy Terziev sull'aggiunta dell'alias a .bashrc ma con le seguenti specifiche:

alias python = '“/ c / Users / il mio nome utente / AppData / Local / Programs / Python / Python37 / python.exe”'

Notare la combinazione di virgolette singole e doppie a causa degli spazi "il mio nome utente".

Per me, "winpty" non è riuscito a risolvere il percorso Python in vscode.


0

Un altro esempio di questo problema è l'utilizzo dell'interfaccia della riga di comando di AWS Elastic Beanstalk (awsebcli, eb cli) da git bash (MINGW64, Mintty) in Windows (usando la versione git 2.19.0.windows.1).

Sto solo postando questo perché mi ci è voluto un po 'per finire qui, alla ricerca di eb-cliproblemi specifici.

Comandi come eb inito eb config save, che richiedono l'input dell'utente, sembrano causare un blocco / blocco. In realtà immagino che la console non sia aggiornata con il testo che richiede l'input dell'utente. Inoltre, eb deployaggiorna il testo della console solo al termine del comando, quindi non vedo gli aggiornamenti sui progressi fino al termine.

Come menzionato nelle note di rilascio di git for windows (per v2.19.0) e, ad esempio, nella risposta di Xun Yang , è necessario eseguire una soluzione alternativa

winpty eb <command>(invece di solo eb <command>)

Un'alternativa, come suggerito in questo problema di git per Windows , potrebbe essere quella di utilizzare la console nativa di Windows invece di mintty (opzione durante l'installazione di git).


0

Quello che ha funzionato per me è come menzionato in precedenza in queste grandi risposte sopra è l'alias come segue: (sto usando anaconda, quindi prima trova dov'è il percorso python, quindi aggiungilo nell'alias su git bash). 1. su anaconda terminal corro: where python 2. su git bash corro: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Fatto. Python è definito all'interno di git Bash usando l'alias.

Grazie a (Vitaliy Terziev e hygull) per le loro risposte molto utili.


0
  1. python.exe -ifunziona ma si sono verificati problemi all'uscita dalla modalità interattiva inviando "^ Z" (CTRL + Z). Quindi, sembra meglio usare winpty python.exein Git Bash per Windows.

  2. Utilizzare la ~/bindirectory per creare un file di avvolgimento / riferimento (come ~/bin/python) che sarà accessibile ovunque (è possibile utilizzare come riferimento versione diversa come ~/bin/python37).
    Codice all'interno del file:

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

Semplicemente non mi piacciono questi alias "magici" che dimentichi sempre da dove proviene, e in alcuni casi porta a problemi.

  1. Usa ~/bin/pythonfile e -iparametro:
#!/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)- esempio di risposta dopo l'invio ^Zcon modalità interattiva eseguita dapython.exe -i
Kirby il

0

Digita il comando PY invece di Python. Invocare l'interprete (python.org).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.