Esecuzione di script python all'interno di ipython


122

È possibile eseguire uno script python (non un modulo) dall'interno di ipython senza indicarne il percorso? Ho provato a impostare PYTHONPATH ma sembra funzionare solo per i moduli. Vorrei eseguire

%run my_script.py

senza essere nella directory contenente il file.


import <module>è essenzialmente lo stesso exec(<moduleSource>)di JavaScript o Perl.
Vortico

14
+1 per la sintassi% run abc.py - stava cercando di cercarlo
Sid Kshatriya

1
puoi usare il percorso:% run ../scripts/my_scripts per esempio
Jose A. Martín

per gli script CLI sviluppati con la libreria Click per me non funziona, ottengo: IOErrorTraceback (ultima chiamata più recente) /home/miguelfg/workspace/projects*********/db_preparation.py in <module > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Risposte:


126

dalla directory di "my_script.py" puoi semplicemente fare:

%run ./my_script.py

migliore risposta per semplicità e concisione
Evhz

SyntaxError: invalid syntaxqui, sulla console Python . Python 3.5.3 su Debian 9. Tuttavia, funziona su IPython.
rotton

1
@rotton è perché %runè un comando magico ipython, non fa parte del linguaggio Python stesso.
HugoMailhot

28

Come eseguire uno script in Ipython

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

Dovrebbe bastare


16

La %runmagia ha un parametro file_finderche usa per ottenere il percorso completo del file da eseguire (vedi qui ); come si nota, cerca solo nella directory corrente, aggiungendo ".py" se necessario.

Non sembra essere un modo per specificare quali file finder per l'uso dalla magia, ma non c'è niente che impedisca di definire il proprio comando di magia che le chiamate in un cercatore di file appropriato.%run%run

Come hack molto brutto, potresti sovrascrivere l'impostazione predefinita file_findercon il tuo:

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

Ad essere onesti, alla velocità con cui l'API IPython sta cambiando, è probabile che continui a funzionare come lo è la definizione della tua magia.


16

In python non c'è differenza tra moduli e script; Puoi eseguire sia script che moduli. Il file deve essere su pythonpath AFAIK perché python deve essere in grado di trovare il file in questione. Se python viene eseguito da una directory, la directory viene automaticamente aggiunta al percorso python.

Fare riferimento a Qual è il modo migliore per chiamare uno script Python da un altro script Python? per ulteriori informazioni sui moduli e sugli script

C'è anche una funzione incorporata execfile (nomefile) che farà quello che vuoi


1
Questo è anche quello che ho pensato. Tuttavia, in pratica i moduli possono essere importati ma gli script non vengono trovati dall'interprete a meno che non vengano avviati dalla directory a cui appartengono.
Tyler Durden

1
Leggi docs.python.org/tutorial/modules.html#the-module-search-path per maggiori informazioni. Descrive dove deve essere messo affinché python trovi il file, Più specificamente, molti moduli possono raddoppiare come script usando la riga "if __name__== ' __main__':" alla fine
Snakes and Coffee

0

per Python 3.6.5

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

1
È runfile()un comando di ipython? Non funziona fuori dagli schemi per me.
user3342981
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.