Hacer que `#! / Usr / bin / env python` funcione en Windows

14

Yo uso Bash en Windows, proporcionado por MSYS.

Intenté ejecutar un archivo Python con un shebang de #!/usr/bin/env python, pero recibo este mensaje de error:

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

¿Qué puedo hacer para que esto funcione?

Sé que puedo iniciar el archivo Python con un sufijo python, pero también quiero que funcione sin el sufijo.

Ram Rachum
fuente

Respuestas:

8

Utilice la ruta correcta donde está instalado Python, por ejemplo:

#!c:/Python/python.exe

Si tiene soporte de ruta similar a Unix en su sistema (no estoy familiarizado con MSYS), siempre puede ingresar la ruta a su pythonejecutable, es decir, la salida de which python.

Daniel Beck
fuente
2
O podría usar env, como lo está haciendo el autor de la pregunta.
Ignacio Vazquez-Abrams
No puedo cambiar el shebang, es parte de un proyecto que involucra a otros programadores que trabajan en Linux y Mac.
Ram Rachum
@RamRachum ¿Cuál es el resultado de which envy which pythony type python?
Daniel Beck
0

Qué sucede cuando ejecutas (desde el shell):

$ /usr/bin/env python

..?

Si comienza una sesión interactiva de Python, se puede encontrar Python. (También puede simplemente ejecutar:) type python. Si imprime "no existe tal archivo o directorio", entonces pythonno se encuentra en su RUTA. Vea si se puede ajustar lo siguiente para solucionar el problema (los espacios en la ruta / a / python probablemente causarán problemas):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Miguel
fuente
0

activate.shResulté ser un desajuste entre el archivo de Virtualenv y MSYSGIT. Nunca tuvo la intención de funcionar en Windows.

Ram Rachum
fuente
0

Las últimas versiones de Windows 10 admiten la instalación de subsistemas de Linux. Si corre desde allí, las rutas deben ser correctas.

Debería ser una solución de trabajo si está de acuerdo con ejecutarlo de esa manera.

Grifo
fuente
0

La raíz del problema es que los espacios en shebangs se interpretan como el suministro de argumentos adicionales a un archivo ejecutable, por lo C:\Program Files\Python\python.execonsigue vistos como C:\Programdada Files\Python\python.execomo argumento.

La mejor solución para esto, porque Windows AMA los espacios en el $HOMEdirectorio y en Program Filesotros lugares a pesar de que realmente puede romper cosas en cmd.exe y Powershell y otras herramientas, es:

Instale Python C:\Pythony agregue la C:\Pythoncarpeta donde python.exevive y el Scriptsdirectorio que vive dentro de él a su PATHvariable de entorno a nivel de sistema o usuario.

Si necesita 2.7.x Python 3.x que coexisten, instalarlos en C:\Python27y C:\Python36y C:\Python37y cambiar el nombre python.exede python2.exe, python36.exe, python37.exe, etc y añadir cada una de estas carpetas y sus Scriptscarpetas en el PATH. Es posible que desee determinar cuál de las versiones de Python 3 desea que sea la "predeterminada" y también hacer una copia en esa carpeta python3.exepara manejar cualquier script que use !#/usr/bin/env python3.

Si su directorio de inicio de usuario tiene un espacio, también puede experimentar problemas si utiliza la pip install --user somepackagesintaxis. Los --uservalores predeterminados de su directorio de inicio, y el espacio también se dispararán las cosas en este caso. La solución se describe aquí, pero se reduce a exportar PYTHONUSERBASE a su entorno.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

o en Windows (Powershell):

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