Python ne fonctionne pas dans la ligne de commande de git bash

236

Python ne fonctionnera pas dans git bash (Windows). Lorsque je tape python dans la ligne de commande, cela m'amène à une ligne vierge sans dire qu'il a entré python 2.7.10 comme il le fait dans Powershell. Cela ne me donne pas de message d'erreur, mais python ne fonctionne tout simplement pas.

J'ai déjà fait en sorte que les variables environnementales dans PATH soient incluses c:\python27. Que puis-je vérifier d'autre?


Une session dans laquelle ce problème se produit ressemble à ceci:

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

user@hostname MINGW64 ~
$ python

... assis là sans revenir à l'invite.

Caroline Morris
la source
2
"Rien ne se passe"? Vous n'avez même pas d'erreur? (Ce qui veut dire: si vous obtenez un message d'erreur, cela devrait faire partie de votre question).
Charles Duffy
@recursive, bash respecte en effet PATH. (Il a cependant sa propre version de cette variable).
Charles Duffy
11
Je ne reçois pas de message d'erreur lorsque je tape en python. Cela m'amène simplement à une ligne vierge, mais ne montre pas que le python fonctionne réellement
Caroline Morris
4
@CharlesDuff, elle a dit clairement, Charles, aucun message d'erreur. Bash se fige. Geler un terminal est le message d'erreur.
Green
1
@Green, comme cela devrait être évident dans ma réponse, ce n'est plus un point qui manque de clarté - et cela ne dure pas depuis plus d'une année. De plus, la question n'était pas aussi claire sur ce point qu'elle ne l'est maintenant jusqu'à ce que je la modifie pour la rendre non ambiguë sur le point suivant le commentaire du PO plus tôt dans ce fil; vérifier l'historique.
Charles Duffy

Réponses:

361

Entrez simplement ceci dans votre shell git sur windows -> alias python='winpty python.exe', c'est tout et vous allez avoir un alias pour l'exécutable python. Prendre plaisir

PS Pour l'ajout d'alias permanent, voir ci-dessous,

cd ~
touch .bashrc

puis ouvrez .bashrc, ajoutez votre commande d'en haut et enregistrez le fichier. Vous devez créer le fichier via la console ou vous ne pouvez pas l'enregistrer avec le nom correct. Vous devez également redémarrer le shell pour appliquer la modification.

Vitaliy Terziev
la source
17
Fonctionne comme un charme.
Green
4
Remarque: Vous devrez utiliser la fonction Python quit()pour sortir de l'interpréteur.
anishpatel
5
Vous pouvez également utiliser (le standard Windows) ^Z(ctrl-Z) + returnpour quitter.
Emil Styrke
6
De plus, si vous souhaitez définir l'alias sur un python «différent» de celui de Windows, vous pouvez définir un chemin d'accès complet vers celui-ci en utilisant la syntaxe suivantealias python='winpty /c/Python27/python.exe'
ScottMcC
10
C'est peut-être la meilleure chose que j'aie jamais trouvée sur Internet.
mdw7326
79

Je ne vois pas l'option suivante dans une liste de réponses, mais je peux obtenir une invite interactive avec la touche "-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
la source
Argument -i: lorsqu'un script est transmis en tant que premier argument ou que l'option -c est utilisée, passez en mode interactif après avoir exécuté le script ou la commande, même lorsque sys.stdin ne semble pas être un terminal. Le fichier PYTHONSTARTUP n'est pas lu. docs.python.org/3/using/cmdline.html#cmdoption-i
Mercure
Est-ce plus coûteux que l' alias python = 'winpty python.exe' ?
PYK
1
c'est l'option sans effort de configuration qui fonctionne sur n'importe quel ordinateur.
vav
58

Il s'agit d'un bogue connu de MSys2, qui fournit le terminal utilisé par Git Bash. Vous pouvez contourner ce problème en exécutant une génération Python sans prise en charge de ncurses, ou en utilisant WinPTY , utilisé comme suit:

Pour exécuter un programme de console Windows dans mintty ou Cygwin sshd, ajoutez console.exe à la ligne de commande:

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

Les binaires préconstruits pour msys sont susceptibles de fonctionner avec Git Bash. (Vérifiez s'il existe une version plus récente si un délai important s'est écoulé depuis la publication de cette réponse!).


Depuis Git pour Windows 2.7.1, essayez également d'utiliser winpty c:Python27/python.exe; WinPTY peut être inclus prêt à l'emploi.

Charles Duffy
la source
2
Pouvez-vous s'il vous plaît, expliquer le build/console.exe c:/Python27/python.exe- est-ce que cela devrait être exécuté dans la console GitMsys ou de toute autre manière?
0leg
@ h3d0, oui, à l'intérieur du terminal. Bien sûr, cela suppose que buildc'est le répertoire qui se console.exetrouve dans; mettre à jour le chemin d'accès en fonction de l'endroit / de la façon dont vous l'avez réellement installé.
Charles Duffy
1
@ h3d0 Oui, c'est un logiciel supplémentaire; ma réponse comprend un lien.
Charles Duffy
7
Je pense que vous pouvez l'utiliser comme winpty c:/Python27/python.exe, sans rien faire de plus. L'utilitaire winpty.exe se trouve dans Git \ usr \ bin. J'utilise Git pour Windows v2.7.1
Xun Yang
1
@XunYang, ... winpty est intégré maintenant? Agréable! Modifié de manière appropriée.
Charles Duffy
47

Je suis un utilisateur de Windows 10 et j'ai installé GIT dans mon système en acceptant simplement les valeurs par défaut.

Après avoir lu les réponses ci-dessus, j'ai obtenu 2 solutions pour moi et ces 2 solutions fonctionnent parfaitement sur GIT bash et me facilitent pour exécuter des instructions Python sur GIT bash.

Je joins 3 images de mon terminal bash GIT . 1er avec problème et les 2 derniers comme solutions.

PROBLÈME - Le curseur attend juste après avoir pythonappuyé sur la commande

entrez la description de l'image ici

SOLUTION 1

Exécuter winpty <path-to-python-installation-dir>/python.exesur GIT terminal bash .

Remarque: N'utilisez pas le C:\Users\Adminmême style de chemin dans GIT bash, utilisez plutôt /C/Users/Admin.

Dans mon cas, j'ai exécuté la winpty /C/Users/SJV/Anaconda2/python.execommande sur GIT bash

Ou si vous ne connaissez pas votre nom d'utilisateur, exécutezwinpty /C/Users/$USERNAME/Anaconda2/python.exe

entrez la description de l'image ici

SOLUTION 2

Tapez python -iet c'est tout.

entrez la description de l'image ici

Merci.

hygull
la source
2
J'ai trouvé que winptycela fonctionnerait également avec le lanceur Windows Python, donc tout ce dont vous avez besoin est par exemple alias py='winpty py'dans votre .bashrc et ensuite revenir à la normale.
Karl Knechtel
Oui, c'est à vous, comment gérez-vous les choses pour améliorer votre vie.
hygull
9

Essayez python -iau lieu de python, c'est une chose de curseur.

James
la source
8

En plus de la réponse de @ Charles-Duffy, vous pouvez utiliser directement winpty sans installer / télécharger quoi que ce soit supplémentaire. Il suffit de courirwinpty c:/Python27/python.exe . L'utilitaire winpty.exe se trouve dans Git \ usr \ bin. J'utilise Git pour Windows v2.7.1

Les binaires préconstruits de @ Charles-Duffy sont la version 0.1.1 (selon le nom du fichier), tandis que celui inclus est 0.2.2

Xun Yang
la source
8

Solution de contournement de Git Bash - Lancez Python 2 et Python 3 avec des alias

Salut . C'est (pour moi) la meilleure solution pour exécuter les deux Python (Python 2.7 et Python 3.x) directement à partir de Git Bash sur Win 10 => en ajoutant des alias dans le fichier d'alias que Git Bash utilise pour.

Le fichier d'alias Git Bash est aliases.sh . Il est situé dans:

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

1) Ouvrez (avec un éditeur de texte comme Atom ou autre) le aliases.sh

par exemple: dans mon cas, le fichier est en C:\Software\Develop\Git\etc\profile.d\aliases.sh

2) Ajoutez votre alias pour Python

Dans mon cas, les python.exe sont installés dans:

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

Donc , vous devez créer 2 alias, un pour Python 2 (j'ai nommé python2 ) et l'autre pour Python 3 (j'ai appelé juste python ) Git Bash utilise la structure de fichiers linux si vous avez besoin de changer le « \ » pour « / » et si vous avoir un chemin comme mon exemple Network Automation vous le mettez avec ""

"Network Automation" , par ex.

winpty est la commande magique qui appellera l'exécutable.

Ajoutez donc ces lignes au début 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) Ajoutez ou modifiez d'autres alias (si vous le souhaitez)

J'ai également modifié l' alias ll pour afficher tous les fichiers et dans une liste lisible par l'homme:

alias ll='ls -lah'

4) Enregistrez le fichier aliases.sh


5) OK !!! fermez et relancez votre Git Bash

Maintenant, en permanence, vous pouvez lancer les deux Python directement à partir du shell Git en écrivant simplement

$ python -> lancer Python 3

$ python2 -> lancer Python 2

$ ll -> entre un ls -lah pour afficher rapidement votre liste de fichiers détaillée

À la vôtre, Harry

Harry
la source
5

Vous pouvez modifier la cible du raccourci Git Bash à partir de:

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

à

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

C'est ainsi que ConEmu a utilisé pour démarrer git bash (version 16). La version récente démarre normalement et c'est comme ça que j'y suis arrivé ...

Igonato
la source
Cela a fonctionné pour moi 👍. Il vaut la peine de noter ce que font les arguments bash.exe? la page de manuel dit -l: Faites bash agir comme s'il avait été invoqué comme shell de connexion,: -iSi les options -i sont présentes, le shell est interactif
Jour
J'avais l'habitude d'avoir ConEmu fonctionnant bien sans winpty il y a un moment et j'ai complètement oublié ce que j'ai fait. Merci, cela a fonctionné comme avant!
chaz
5

tapez: «python vide» et cela fonctionnera

gitbash a quelques problèmes lors de l'exécution d'une commande commençant par python. cela vaut également pour toutes les commandes manage.py de python. Commencez toujours par 'winpty python manage.py' Au moins, c'est ce qui fonctionne pour moi. Exécution de Windows 10.

Bryce Regan LeFevre
la source
2

En plus de la réponse de @Vitaliy Terziev

essayez touch .bash_profilepuis ajoutez un alias dans le fichier.

henjiFire
la source
1
J'ai utilisé .bashrc, mais lorsque j'ai ouvert Git Bash, j'ai reçu un message d'avertissement indiquant que bashrc existe sans .bash_profile. J'ai renommé .bashrc en .bash_profile et maintenant l'avertissement a disparu. Merci.
JustinDanielson
2

2 solutions de contournement, plutôt qu'une solution: Dans mon Git Bash, la commande suivante se bloque et je ne reçois pas l'invite:

% python

Donc j'utilise juste:

% winpty python

Comme certaines personnes l'ont noté ci-dessus, vous pouvez également utiliser:

% python -i

.

BabarBaig
la source
1

J'utilise MINGW64 via Visual Studio Code sur Windows 10 et j'essaie d'installer node-sass(ce qui nécessite python2). J'ai suivi felixrieseberg / windows-build-tools # 56 sur Github qui a résolu mon problème.

Ceci est un cas spécial, mais je poste au cas où quelqu'un aurait le même problème:

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

Cela installe python et d'autres outils de construction requis dans %USERPROFILE%\.windows-build-tools\python27.

Blaskovicz
la source
1

Pour python version 3.7.3 dans vscode avec gitbash comme terminal par défaut, j'ai traité cela pendant un certain temps, puis j'ai suivi les conseils de @Vitaliy Terziev d'ajouter l'alias à .bashrc mais avec la spécification suivante:

alias python = '"/ c / Users / mon nom d'utilisateur / AppData / Local / Programs / Python / Python37 / python.exe"'

Remarquez la combinaison de guillemets simples et doubles en raison des espaces «mon nom d'utilisateur».

Pour moi, "winpty" n'a pas pu résoudre le chemin python dans vscode.

Charlyboy
la source
0

Un autre exemple de ce problème est l'utilisation de l'interface de ligne de commande AWS Elastic Beanstalk (awsebcli, eb cli) à partir de git bash (MINGW64, Mintty) dans Windows (à l'aide de git version 2.19.0.windows.1).

Je poste juste cela parce qu'il m'a fallu un certain temps pour me retrouver ici, à la recherche de eb-cli problèmes spécifiques.

Les commandes telles que eb initou eb config save, qui nécessitent une entrée utilisateur, semblent provoquer un blocage / blocage. En réalité, je suppose que la console n'est pas mise à jour avec le texte demandant l'entrée utilisateur. De plus, eb deployne met à jour le texte de la console qu'après la fin de la commande, donc je ne vois pas les mises à jour de progression avant la fin.

Comme mentionné dans les notes de mise à jour de git for windows (pour v2.19.0) et par exemple dans la réponse de Xun Yang , une solution de contournement est d'exécuter

winpty eb <command>(au lieu de juste eb <command>)

Une alternative, comme suggéré dans ce problème git pour windows , pourrait être d'utiliser la console native de windows au lieu de mintty (option lors de l'installation de git).

djvg
la source
0

Celui qui a fonctionné pour moi est comme mentionné précédemment dans ces bonnes réponses ci-dessus est l'alias comme suit: (J'utilise anaconda, alors commencez par trouver où est le chemin python, puis ajoutez-le dans l'alias sur git bash). 1. sur le terminal anaconda je lance: where python 2. sur git bash je lance: alias python='winpty "C:\ProgramData\Anaconda3\envs\your_env_name\python.exe"' 3. Terminé. Python est défini à l'intérieur du git Bash en utilisant l'alias.

Merci à (Vitaliy Terziev & hygull) pour leurs réponses très utiles.

HassanSh__3571619
la source
0
  1. python.exe -ifonctionne mais a rencontré des problèmes pour quitter le mode interactif en envoyant "^ Z" (CTRL + Z). Il semble donc préférable de l'utiliser winpty python.exedans Git Bash pour Windows.

  2. Utilisez le ~/binrépertoire pour créer un fichier wrap / référence (comme ~/bin/python) qui sera accessible partout (vous pouvez utiliser une référence de version différente comme ~/bin/python37).
    Code à l'intérieur du fichier:

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

Je n'aime tout simplement pas ces alias "magiques" dont vous oubliez toujours d'où ils viennent, et qui entraînent parfois des problèmes dans certains cas.

  1. Utilisez le ~/bin/pythonfichier et le -iparamètre:
#!/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
la source
19480756 [sig] bash 2740! sigpacket::process: Suppressing signal 18 to win32 process (pid 14820)- exemple de réponse après envoi ^Zen mode interactifpython.exe -i
Kirby
0

Tapez la commande PY au lieu de Python. Appel de l'interpréteur (python.org).

Alyf
la source
-2

Jetez un œil à cette réponse:

Git Bash ne lancera pas mes fichiers python?

le chemin dans Git Bash devrait être défini comme ceci:

PATH=$PATH:/c/Python27/
jamais
la source
2
En fait non! Je peux reproduire le problème de l'OP, et python se trouve dans le PATH sans problèmes. Voir sourceforge.net/p/msys2/tickets/32
Charles Duffy
La publication d'OP suggère que le PATH n'est pas le problème.
Hilton Shumway