Faire fonctionner # # / usr / bin / env python sur Windows

14

J'utilise Bash sur Windows, fourni par MSYS.

J'ai essayé d'exécuter un fichier Python avec un shebang de #!/usr/bin/env python, mais je reçois ce message d'erreur:

/usr/bin/env: python: No such file or directory

Que puis-je faire pour que cela fonctionne?

Je sais que je peux lancer le fichier Python en le suffixant avec python, mais je veux qu'il fonctionne aussi sans le suffixe.

Ram Rachum
la source

Réponses:

8

Utilisez plutôt le chemin approprié où Python est installé, par exemple:

#!c:/Python/python.exe

Si vous avez un support de chemin de type Unix sur votre système (je ne connais pas MSYS), vous pouvez toujours entrer le chemin de votre pythonexécutable, c'est-à-dire la sortie de which python.

Daniel Beck
la source
2
Ou vous pouvez utiliser env, comme le fait le demandeur.
Ignacio Vazquez-Abrams
Je ne peux pas changer le shebang, cela fait partie d'un projet qui implique d'autres programmeurs qui travaillent sur Linux et Mac.
Ram Rachum
@RamRachum Quelle est la sortie de which envet which pythonet type python?
Daniel Beck
0

Que se passe-t-il lorsque vous exécutez (à partir du shell):

$ /usr/bin/env python

..?

S'il démarre une session python interactive, alors python peut être trouvé. (Vous pouvez également exécuter simplement:) type python. S'il affiche "aucun fichier ou répertoire", il pythonn'est pas trouvé dans votre PATH. Voyez si les éléments suivants peuvent être modifiés pour résoudre le problème (les espaces dans le chemin / vers / python causeront probablement des problèmes):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Michael
la source
0

Je me suis avéré être un décalage entre le activate.shfichier de Virtualenv et MSYSGIT. Il n'a jamais été conçu pour fonctionner sous Windows.

Ram Rachum
la source
0

Les dernières versions de Windows 10 prennent en charge l'installation de sous-systèmes Linux. Si vous exécutez à partir de là, les chemins doivent être corrects.

Cela devrait être une solution de travail si vous êtes d'accord pour le faire de cette façon.

Griffon
la source
0

La racine du problème est que les espaces dans les shebangs sont interprétés comme fournissant des arguments supplémentaires à un exécutable, donc C:\Program Files\Python\python.exeest considéré comme C:\Programdonné Files\Python\python.execomme argument.

La meilleure solution pour cela, car Windows AIME les espaces dans le $HOMErépertoire et dans d' Program Filesautres endroits, même si cela peut vraiment casser des choses dans cmd.exe et Powershell et d'autres outils, est:

Installez Python C:\Pythonet ajoutez le C:\Pythondossier où python.exeréside et le Scriptsrépertoire qui y réside à votre PATHvariable d'environnement au niveau du système ou de l'utilisateur.

Si vous avez besoin Python 2.7.x et 3.x à coexister, les installer dans C:\Python27et C:\Python36et C:\Python37et renommer python.exeà python2.exe, python36.exe, python37.exe, etc et ajouter chacun de ces dossiers et leurs Scriptsdossiers dans le PATH. Vous voudrez peut-être déterminer laquelle des versions de Python 3 vous voulez être la "valeur par défaut" et également faire une copie dans ce dossier python3.exepour gérer les scripts qui utilisent !#/usr/bin/env python3.

Si votre répertoire personnel contient un espace, vous pouvez également rencontrer des problèmes si vous utilisez la pip install --user somepackagesyntaxe. Les --uservaleurs par défaut de votre répertoire personnel, et l'espace déclenchera également les choses dans ce cas. La solution de contournement est décrite ici mais se résume à l'exportation de PYTHONUSERBASE dans votre environnement.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

ou sous Windows (Powershell):

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
dragon788
la source