Ejecutando el script de Python dentro de ipython


122

¿Es posible ejecutar un script de Python (no un módulo) desde dentro de ipython sin indicar su ruta? Intenté configurar PYTHONPATH pero parece funcionar solo para módulos. Me gustaria ejecutar

%run my_script.py

sin estar en el directorio que contiene el archivo.


import <module>es esencialmente el mismo que exec(<moduleSource>)en JavaScript o Perl.
Vortico

14
+1 para la sintaxis% run abc.py - estaba tratando de buscar eso
Sid Kshatriya

1
puede usar la ruta:% run ../scripts/my_scripts por ejemplo
Jose A. Martín

para los scripts de CLI desarrollados con la biblioteca Click no me funciona, obtengo: IOErrorTraceback (última llamada más reciente) /home/miguelfg/workspace/projects**********/db_preparation.py en <módulo > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Respuestas:


126

desde el directorio de "my_script.py", simplemente puede hacer:

%run ./my_script.py

la mejor respuesta para la simplicidad y la concisión
Evhz

SyntaxError: invalid syntaxaquí, en la consola de Python . Python 3.5.3 en Debian 9. Sin embargo, funciona en IPython.
Rotton

1
@rotton eso es porque %runes un comando mágico de ipython, no parte del lenguaje Python en sí.
HugoMailhot

28

Cómo ejecutar un script en Ipython

import os
filepath='C:\\Users\\User\\FolderWithPythonScript' 
os.chdir(filepath)
%run pyFileInThatFilePath.py

Deberias hacer eso


16

La %runmagia tiene un parámetro file_finderque usa para obtener la ruta completa al archivo para ejecutar (ver aquí ); como nota, solo busca en el directorio actual, agregando ".py" si es necesario.

No parece haber una forma de especificar qué buscador de archivos usar desde la %runmagia, pero no hay nada que le impida definir su propio comando mágico que llama a%run con un buscador de archivos apropiado.

Como truco muy desagradable, podría anular el predeterminado file_findercon el suyo:

IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder

Para ser honesto, al ritmo que cambia la API de IPython, es tan probable que continúe funcionando como lo es definir su propia magia.


16

En Python no hay diferencia entre módulos y scripts; Puede ejecutar tanto scripts como módulos. El archivo debe estar en pythonpath AFAIK porque Python debe poder encontrar el archivo en cuestión. Si python se ejecuta desde un directorio, entonces el directorio se agrega automáticamente a la ruta de python.

Consulte ¿Cuál es la mejor manera de llamar a un script de Python desde otro script de Python? para obtener más información sobre módulos vs scripts

También hay una función incorporada execfile (nombre de archivo) que hará lo que quieras


1
Eso es también lo que pensé. Sin embargo, en la práctica, los módulos se pueden importar, pero el intérprete no encuentra los scripts a menos que se inicien desde el directorio al que pertenecen.
Tyler Durden

1
Lea docs.python.org/tutorial/modules.html#the-module-search-path para obtener más información. Detalla dónde debe colocarse para que Python encuentre el archivo. Más específicamente, muchos módulos pueden funcionar como scripts usando la línea "if __name__== ' __main__':" al final
Snakes and Coffee

0

para Python 3.6.5

import os
os.getcwd()
runfile('testing.py')

1
¿Es runfile()un comando de ipython? No funciona de inmediato para mí.
user3342981
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.