¿Existe una forma portátil de ejecutar un script de python desde un shell sin escribir su ruta completa?Cómo ejecutar un script de Python de forma portátil sin especificar su ruta completa
Por ejemplo, en Linux, quisiera mientras que en mi directorio
cd ~
para ser capaz de ejecutar un script en Python llamada run.py que es, digamos, en ~/tiempo/ruta/a/run .py, pero quiero ejecutarlo simplemente escribiendo
python run.py
en lugar de
python ~/long/path/to/run.py
espero algún tipo de se arch path list que contiene varios directorios al igual que la variable PATH, de modo que python run.py ejecuta el primer run.py que encuentra en uno de los directorios.
He considerado convertir run.py en un ejecutable y agregar su directorio a la variable PATH del sistema, pero no he podido encontrar una forma portátil de hacer un script python ejecutable.
EDITAR
Un año más tarde después de pedir, yo soy un poco menos novato, y veo que mi pregunta no era muy clara y no tiene mucho sentido, así que después de una pregunta voy a upvote aclarar algunas cosas
1) Portátil.
Cuando le pregunté esto, dije portable. Sin embargo, qué medios portátiles no están claros en este caso, y no le di mucho énfasis.
las plataformas: debería funcionar en POSIX (Linux, MacOS, etc.) y Windows
esto todavía no tiene mucho sentido ya que Windows utiliza
cmd.exe
y POSIX utilizash
, por lo que cada uno podría ejecuta los comandos con una sintaxis diferente. Entonces, digamos que la cosa más portátil posible sería alimentar la misma entrada tanto ash
como acmd.exe
, ejecutando el script de python en ambos casos. En este caso, puede ejecutar el mismo comando desde una función ANSI Csystem
, que usash
en POSIX ycmd
en Windows. ANSI C es una de las pocas cosas que es común en Windows y POSIX, la pregunta tiene sentido en ese caso.
2) Ejecutable
A continuación, la frase turning run.py into an executable
, no está muy claro. Por eso estaba hablando de la estrategia de Linux de chmod +x run.py
, agregue un shebang #!/usr/bin/env python
y agregue su directorio al sistema add ~/long/path/to/the PATH environment variable. Pero esto no funcionará para Windows porque Windows no admite una propiedad de metadatos de archivos ejecutables como Linux y porque/usr/bin/env no existe necesariamente en Windows.
3) Extensión
Por último, en mi cabeza me estaba esperando una solución que no especifica qué tipo de ejecución de archivos es, por lo que si algún día nos decidimos a hacerlo, por ejemplo, un archivo Perl, sin las interfaces cambiarían
Por lo tanto, escribir run.py
sería malo porque especificaría el tipo de archivo; sería mejor que ser capaz de escribir simplemente run
Gracias FJ, esto es exactamente lo que estaba buscando, siento que tiene dos ventajas sobre el '#!' acercamiento: 2 –
(específico Lo siento, medio comentario terminado) ... Gracias F.J, esto es lo que estaba buscando, siento que tiene dos ventajas sobre el '#!' enfoque: 1) no saturar los scripts 2) no saturando la variable PATH global, y usando el más específico PYTHONPATH en su lugar. La desventaja es, por supuesto, tener que escribir "python -m" todo el tiempo, lo que ocupa espacio y, lo que es peor, podría significar volver a escribir el código si algún día decides transformar tus secuencias de comandos python en, por ejemplo, scripts bash. –
Intenté ejecutar python -m pero no funcionó ... Estoy seguro de que run.py está en PYTHONPATH porque puedo importarlo y aparece cuando importo sys; print sys.path ... ¿Me estoy perdiendo algo? –