Python não funciona na linha de comando do git bash

236

O Python não será executado no git bash (Windows). Quando digito python na linha de comando, ele me leva para uma linha em branco sem dizer que ele inseriu o python 2.7.10 como no Powershell. Não me dá uma mensagem de erro, mas o python simplesmente não é executado.

Eu já verifiquei se as variáveis ​​ambientais no PATH foram incluídas c:\python27. O que mais posso verificar?


Uma sessão em que esse problema ocorre se parece com o seguinte:

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

user@hostname MINGW64 ~
$ python

... sentado lá sem retornar ao prompt.

Caroline Morris
fonte
2
"Nada acontece"? Você nem recebe um erro? (Ou seja: se você receber uma mensagem de erro, isso deve fazer parte da sua pergunta).
Charles Duffy
@recursive, bash realmente respeita PATH. (Ele tem sua própria versão dessa variável).
Charles Duffy
11
Não recebo uma mensagem de erro quando digito python. Ele só me leva para uma linha em branco, mas não mostra que python é funcionamento real
Caroline Morris
4
@CharlesDuff, ela deixou claro, Charles, nenhuma mensagem de erro. Bash apenas congela. Congelar um terminal é a mensagem de erro.
Verde
1
@ Green, como deve ser óbvio pela minha resposta, esse não é mais um ponto que falta clareza - e não faz parte da maior parte de um ano. Além disso, a questão não era tão clara sobre esse ponto como agora até que eu o editei para torná- lo inequívoco no ponto após o comentário do OP no início deste tópico; verifique a história.
Charles Duffy

Respostas:

361

Basta digitar isso no seu shell git no windows -> alias python='winpty python.exe', isso é tudo e você terá um alias para o executável python. Aproveitar

PS Para adição de alias permanente, veja abaixo,

cd ~
touch .bashrc

abra o .bashrc, adicione seu comando de cima e salve o arquivo. Você precisa criar o arquivo através do console ou não pode salvá-lo com o nome adequado. Você também precisa reiniciar o shell para aplicar a alteração.

Vitaliy Terziev
fonte
17
Funciona como um encanto.
Verde
4
Nota: Você precisará usar a função Python quit()para escapar do intérprete.
Anishpatel 01/11/19
5
Você também pode usar (o padrão do Windows) ^Z(ctrl-Z) + returnpara sair.
Emil Styrke
6
Além disso, se você deseja definir o alias para um python 'diferente' do Windows, é possível definir um caminho totalmente qualificado para ele usando a seguinte sintaxealias python='winpty /c/Python27/python.exe'
ScottMcC
10
Essa pode ser a melhor coisa que eu já encontrei na internet.
mdw7326
79

Não vejo a próxima opção em uma lista de respostas, mas posso obter um prompt interativo com a tecla "-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
fonte
-i argument: Quando um script é passado como primeiro argumento ou a opção -c é usada, entre no modo interativo após executar o script ou o comando, mesmo quando sys.stdin não parece ser um terminal. O arquivo PYTHONSTARTUP não é lido. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercury
Isso é mais caro do que o apelido python = 'winpty python.exe' ?
PYK
1
esta é a opção com zero esforço de configuração que funciona em qualquer computador.
vav
58

Este é um bug conhecido no MSys2, que fornece o terminal usado pelo Git Bash. Você pode contornar isso executando uma compilação Python sem suporte a ncurses ou usando o WinPTY , usado da seguinte maneira:

Para executar um programa de console do Windows no mintty ou Cygwin sshd, acrescente console.exe à linha de 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()

Os binários pré-criados para msys provavelmente funcionarão com o Git Bash. (Verifique se há uma versão mais recente se tiver passado um tempo significativo desde que esta resposta foi publicada!).


No Git for Windows 2.7.1, tente também usar winpty c:Python27/python.exe; O WinPTY pode ser incluído imediatamente.

Charles Duffy
fonte
2
Você pode, por favor, explicar o build/console.exe c:/Python27/python.exe- isso deve ser executado no console do GitMsys ou de qualquer outra maneira?
0leg
@ h3d0, sim, dentro do terminal. Obviamente, isso pressupõe que esse buildseja o diretório em que console.exeestá; atualize o caminho adequadamente, dependendo de onde / como você realmente o instalou.
Charles Duffy
1
@ h3d0 Sim, é um software adicional; minha resposta inclui um link.
Charles Duffy
7
Eu acho que você pode usá-lo como winpty c:/Python27/python.exe, sem fazer nada adicional. O utilitário winpty.exe pode ser encontrado em Git \ usr \ bin. Eu estou usando o Git para Windows v2.7.1
Xun Yang
1
@XunYang, ... winpty está empacotado agora? Agradável! Editado adequadamente.
Charles Duffy
47

Eu sou usuário do Windows 10 e instalei o GIT no meu sistema, apenas aceitando os padrões.

Depois de ler as respostas acima, obtive 2 soluções próprias e essas 2 soluções funcionam perfeitamente no GIT bash e me facilitam a executar instruções Python no GIT bash.

Estou anexando 3 imagens do meu terminal GIT bash. 1 com problema e os 2 últimos como soluções.

PROBLEMA - O cursor está apenas aguardando após pressionar o pythoncomando

insira a descrição da imagem aqui

SOLUÇÃO 1

Execute winpty <path-to-python-installation-dir>/python.exeno terminal do GIT bash.

Nota: Não use o C:\Users\Adminestilo de caminho semelhante no GIT bash; em vez disso, use /C/Users/Admin.

No meu caso, eu executei o winpty /C/Users/SJV/Anaconda2/python.execomando no GIT bash

Ou, se você não souber seu nome de usuário , executewinpty /C/Users/$USERNAME/Anaconda2/python.exe

insira a descrição da imagem aqui

SOLUÇÃO 2

Basta digitar python -ie é isso.

insira a descrição da imagem aqui

Obrigado.

hygull
fonte
2
Descobri que winptytambém funcionará com o Windows Python Launcher, então tudo que você precisa é, por exemplo, alias py='winpty py'no seu .bashrc e depois voltar ao normal.
Karl Knechtel
Sim, depende de você, como você gerencia as coisas para melhorar sua vida.
Hygull # 14/19
9

Tente em python -ivez de python, é uma coisa do cursor.

James
fonte
8

Além da resposta de @ Charles-Duffy, você pode usar o winpty diretamente sem instalar / baixar nada extra. Apenas corra winpty c:/Python27/python.exe. O utilitário winpty.exe pode ser encontrado em Git \ usr \ bin. Estou usando o Git para Windows v2.7.1

Os binários pré-criados do @ Charles-Duffy são a versão 0.1.1 (de acordo com o nome do arquivo), enquanto o incluído é 0.2.2

Xun Yang
fonte
8

Solução alternativa do Git Bash - inicie o Python 2 e o Python 3 com aliases

HI . Esta é (para mim) a melhor solução para executar o Python (Python 2.7 e Python 3.x) diretamente do Git Bash no Win 10 => adicionando aliases no arquivo de aliases usado pelo Git Bash.

O arquivo de aliases do Git Bash é aliases.sh . Localiza-se em:

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

1) Abra (com um editor de texto como Atom ou outro) o aliases.sh

por exemplo: no meu caso, o arquivo está em C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Adicione seu alias para Python

No meu caso, o python.exe está instalado em:

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

Então você deve criar 2 aliases, um para Python 2 ( I chamado python2 ) e outro para Python 3 ( I chamado apenas python ) Git Bash usa a estrutura de arquivos do Linux, então você precisa para mudar o "\" para "/" e se você tem um caminho como o meu exemplo de automação de rede, você o coloca com ""

"Automação de rede" , por ex.

winpty é o comando mágico que chamará o executável.

Portanto, adicione essas linhas no início de 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) Adicione ou modifique outros aliases (se desejar)

Modifiquei também o ll alias para mostrar todos os arquivos e em uma lista legível por humanos:

alias ll='ls -lah'

4) Salve o arquivo aliases.sh


5) OK !!! feche e reinicie seu Git Bash

Agora, permanentemente, você pode iniciar o Python diretamente do shell Git, escrevendo

$ python -> iniciar o Python 3

$ python2 -> iniciar o Python 2

$ ll -> insere um ls -lah para mostrar rapidamente sua lista detalhada de arquivos

Saúde, Harry

atormentar
fonte
5

Você pode alterar o destino do atalho do Git Bash em:

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

para

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

É assim que o ConEmu costumava iniciar o git bash (versão 16). Versão recente começa normalmente e é como eu cheguei lá ...

Igonato
fonte
Isso funcionou para mim. Vale a pena notar o que os argumentos bash.exe fazem? página homem diz -l: Faça uma festa de agir como se tivesse sido invocado como um shell de login, -i: Se as opções -i estiver presente, o shell é interativo
Dia
Eu costumava ter o ConEmu funcionando bem sem problemas há um tempo atrás e esqueci completamente o que fiz. Graças a isso funcionou como antes!
chaz 04/04
5

digite: 'winpty python' e funcionará

O gitbash tem alguns problemas ao executar qualquer comando que comece com python. isso vale para qualquer comando python manage.py também. Sempre comece com 'winpty python manage.py'. Pelo menos é o que funciona para mim. Executando o Windows 10.

Bryce Regan LeFevre
fonte
2

Além da resposta de @Vitaliy Terziev

tente touch .bash_profilee adicione alias ao arquivo.

henjiFire
fonte
1
Eu usei o .bashrc, mas quando abri o Git Bash, recebi uma mensagem de aviso de que o bashrc existe sem um .bash_profile. Renomeei .bashrc para .bash_profile e agora o aviso foi embora. Obrigado.
JustinDanielson
2

2 soluções alternativas, em vez de uma solução: No meu Git Bash, o seguinte comando trava e não recebo o prompt de volta:

% python

Então eu apenas uso:

% winpty python

Como algumas pessoas observaram acima, você também pode usar:

% python -i

.

BabarBaig
fonte
1

Estou usando o MINGW64 via Visual Studio Code no Windows 10 e tentando instalar node-sass(o que requer python2). Segui felixrieseberg / windows-build-tools # 56 no Github que resolveu meu problema.

Este é um caso especial, mas estou postando caso alguém tenha o mesmo problema:

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

Isso instala o python e outras ferramentas de compilação necessárias %USERPROFILE%\.windows-build-tools\python27.

Blaskovicz
fonte
1

Para python versão 3.7.3 no vscode com gitbash como o terminal padrão, eu estava lidando com isso por um tempo e depois segui o @Vitaliy Terziev de adicionar o alias ao .bashrc, mas com a seguinte especificação:

alias python = '“/ c / Usuários / meu nome de usuário / AppData / Local / Programas / Python / Python37 / python.exe”'

Observe a combinação de aspas simples e duplas devido aos espaços "meu nome de usuário".

Para mim, "winpty" não conseguiu resolver o caminho do python no vscode.

Charlyboy
fonte
0

Outro exemplo desse problema é o uso da interface da linha de comando do AWS Elastic Beanstalk (awsebcli, eb cli) do git bash (MINGW64, Mintty) no Windows (usando a versão 2.19.0.windows.1 do git).

Estou postando isso porque demorei um pouco para terminar aqui, procurando por eb-cliproblemas específicos.

Comandos como eb initou eb config save, que requerem entrada do usuário, parecem causar um congelamento / travamento. Na realidade, acho que o console não é atualizado com o texto que solicita a entrada do usuário. Além disso, eb deployapenas atualiza o texto do console após a conclusão do comando, portanto, não consigo ver as atualizações de progresso até terminar.

Conforme mencionado nas notas de lançamento do git for windows (para v2.19.0) e, por exemplo, na resposta de Xun Yang , uma solução alternativa é executar

winpty eb <command>(em vez de apenas eb <command>)

Uma alternativa, conforme sugerido neste problema do git for windows , poderia ser usar o console nativo do windows em vez do mintty (opção durante a instalação do git).

djvg
fonte
0

O que funcionou para mim é como mencionado anteriormente nessas ótimas respostas acima: o alias é o seguinte: (estou usando o anaconda, primeiro encontre onde está o caminho do python e adicione-o ao alias no git bash). 1. no terminal anaconda eu corro: where python 2. no git bash eu corro: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Concluído. Python é definido dentro do git Bash usando o alias.

Agradecemos a (Vitaliy Terziev & hygull) por suas respostas muito úteis.

HassanSh__3571619
fonte
0
  1. python.exe -ifunciona, mas teve problemas ao sair do modo interativo enviando "^ Z" (CTRL + Z). Portanto, pareça melhor usar winpty python.exeno Git Bash para Windows.

  2. Use o ~/bindiretório para criar um arquivo de quebra / referência (como ~/bin/python) que estará acessível em qualquer lugar (você pode usar diferentes referências de versão ~/bin/python37).
    Código dentro do arquivo:

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

Eu simplesmente não gosto desses pseudônimos "mágicos" que você sempre esquece de onde vem e, às vezes, leva a problemas em alguns casos.

  1. Use ~/bin/pythonarquivo e -iparâmetro:
#!/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
fonte
19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820)- exemplo de resposta após o envio ^Zcom o modo interativo executado porpython.exe -i
Kirby
0

Digite o comando PY em vez de Python. Invocando o intérprete (python.org).

Alyf
fonte
-2

Veja esta resposta:

O Git Bash não executa meus arquivos python?

o caminho no Git Bash deve ser definido assim:

PATH=$PATH:/c/Python27/
nevernew
fonte
2
Na verdade não! Eu posso reproduzir o problema do OP, e o python é encontrado no PATH sem problemas. Veja sourceforge.net/p/msys2/tickets/32
Charles Duffy
A publicação do OP sugere que o PATH não é o problema.
Hilton Shumway