2011-10-21 15 views
5

Acabo de descargar Python 3.2 en el entorno Mac OS 10.6. Soy nuevo en la programación y estoy tratando de ejecutar mi primer archivo .py independiente, pero sigo recibiendo un mensaje de error que dice "sin ese directorio o archivo". El nombre del archivo es "script1.py" y lo guardé en/Users/billp/Documents. Cuando abro el terminal para ejecutar el archivo de tipo I:No se pueden ejecutar los archivos Python .py desde la terminal en Mac

python script1.py 

También he intentado añadir esta línea al principio del script:

#!/usr/local/bin/python 

Así como éste:

#!/usr/bin/env python 

Sin embargo, sigo recibiendo el mismo mensaje de error. Cualquier ayuda sería muy apreciada.

+0

¿Puede mostrarnos el error como un todo? – aayoubi

+0

¿Qué sucede cuando escribe 'python' en el prompt? ¿Recibes el intérprete? – gomad

+0

Tenga en cuenta que debe 'cd' al directorio apropiado, es decir' cd/Users/billp/Documents'. O puede hacer 'python/Users/billp/Documents/script1.py'. – Griffin

Respuesta

4

¿Olvidaste hacer el archivo ejecutable? Intente esto en el símbolo del sistema:

$ chmod +x script1.py 

Prefiero comenzar mis scripts de Python en un Mac con estas líneas (asumiendo por supuesto que va a guardar el archivo en codificación UTF-8:

#!/usr/bin/env python 
#coding=utf-8 

Además, asegúrese de que el comando python esté disponible en la ruta. Si todo está configurado correctamente, primero no será necesario escribir python, y puede ejecutar el script directamente escribiendo ./script1.py en el directorio donde se encuentra

Una última cosa, para el funcionamiento de una pieza de código cuando se ejecuta el script desde la línea de comandos (en lugar de simplemente cargar las definiciones del archivo), escribir esto al final:

if __name__ == '__main__': 
    # the code you want to call 
+1

Por lo que yo sé, no es necesario que el archivo sea ejecutable cuando se trata de un argumento de python. Solo cuando lo ejecutas con el shebang. – Griffin

+0

@Griffin: Correcto, no es así. Hacerlo ejecutable y proporcionar un shebang es cómo lo haces autosuficiente. – jathanism

0

Son sus binarios pitón aquí ?

/Library/Frameworks/Python.framework/Versions/3.2/bin/python 
+0

¿Cuáles son mis "binarios de python"? La ruta que tipeó existe y en la carpeta bin hay varios archivos como: 2to3-3.2, idle3.2, pydoc3.2, python3, python 3.2, etc ... –

+0

Sus binarios de python son el código ejecutable que vino con su python distribución. 'python' es el más importante, pero como has notado, otros como' pydoc' también existen en ese directorio bin. – ObscureRobot

6

Asegúrese de estar en el directorio de trabajo correcto después de abrir la terminal. Tipo

cd /Users/billp/Documents/ 

(pestaña uso autocompletar)

continuación

python ./script1.py 

De esta manera usted está lanzando ejecutable pitón y pasándolo ruta a su archivo como primer argumento. La línea shebang #! que mencionaste te permite iniciar tu script directamente, así: ./script1.py, pero necesitas marcar el archivo como ejecutable chmod +x script1.py y proporcionar la ruta al intérprete (python) después del shebang. #!/usr/bin/env python hace referencia a su instalación predeterminada de python.

El ./ representa el directorio actual. De forma predeterminada, cuando escribe script1.py su shell (que es lo que escribe los comandos, a través del terminal) buscaría el archivo ejecutable en las carpetas especiales enumeradas en PATH env variable. script1.py no suele estar allí, por lo que vería -bash: script1.py: command not found. python, por otro lado está en el PATH por lo que debería funcionar.

+0

¡DULCE! Se ejecutó después de que especifiqué el directorio. Gracias, Lormus. En cuanto a usar #!/Usr/local/bin/python y marcar el archivo como ejecutable con chmod + x, no estoy seguro de entender sus instrucciones. De esta manera: –

+0

(Oops, hit return accidentalmente) ... En cuanto a usar '#!/Usr/local/bin/python' y marcar el archivo como ejecutable con' chmod + x' no estoy seguro de entender tus instrucciones . 1) Incluyo la línea '#!' Mencionada anteriormente como la primera línea en mi script, 2) Escribo './script.py' en el prompt luego de abrir el terminal 3) Marco el archivo como ejecutable con 'chmod + x script1.py' - ¿cómo hago eso? ¿Cuándo/dónde escribo ese comando? Por cierto, gracias por ser tan básico y descriptivo en sus explicaciones, eso es extremadamente útil. –

+0

Cambiar el 2) y 3) :). Escribe 'chmod + x script1.py' en el terminal y marca el archivo como eXecutable, a diferencia de los archivos de datos normales. (En la extensión mundial de Windows, '.exe' dice lo mismo, mientras que aquí está este 'bit de ejecución'). Entonces puede iniciar el archivo con './Script1.py'. – lormus

0

Vale la pena señalar, siempre que el archivo esté en su directorio actual, está automáticamente disponible. De lo contrario, cualquier archivo tendrá que ser referenciado de manera absoluta utilizando la información de ruta completa.

Así que los siguientes ejemplos están pidiendo el mismo archivo:

explícita (ruta absoluta)

python /Users/billp/Documents/script1.py 
python /Users/billp/Documents/script2.py 
python /Users/billp/Documents/script3.py 

Implícita (ruta relativa)

cd /Users/billp/Documents 
python script1.py 
python script2.py 
python script3.py 

Mientras usted Está trabajando con archivos en el mismo directorio (comúnmente conocido como directorio de trabajo), siempre puede usar rutas relativas de forma segura. Si los archivos están en cualquier otro lugar, siempre debe especificar una ruta absoluta.

+0

Obviamente, mi problema se originó en un malentendido de las rutas y cómo dar instrucciones al intérprete de Python a través de la terminal. Ambas opciones funcionan perfectamente. Gracias. Sin embargo, tengo una pregunta sobre la frase "siempre y cuando trabaje con archivos en el mismo directorio" ... ¿qué pasa? ¿Como el directorio donde reside el iniciador de Python? –

+0

Ese sería mi segundo ejemplo. Si cambia a '/ Users/billp/Documents', no tiene que especificar la ruta absoluta. Así que eso es lo que quise decir, archivos en el mismo directorio como el uno al otro. :) – jathanism

Cuestiones relacionadas