Amo ipython, ma ho scoperto un problema con% run: i moduli importati non vengono ricaricati quando% run viene chiamato ripetutamente.ipython: reimportazione di moduli quando si utilizza% run
Supponiamo ex1.py file contiene le linee:
import ex2
ex2.x.append(1)
print ex2.x
e il file contiene ex2.py:
x = []
Ora, in esecuzione pitone ex1.py dalla riga di comando ripetutamente stampe [1] ogni volta. Ma invocare %run ex1.py
da ipython stampa ripetutamente [1], [1,1], [1,1,1], ecc. Questo perché il modulo ex2.py non viene ricaricato. Quindi abbiamo un problema: il protocollo run-script ipython non riflette il comportamento del "mondo reale".
Nota:
%load_ext autoreload
%autoreload 2
fa non aiuto. Quelle linee avranno ex2.py ricaricato solo se è stata apportata una modifica al file ex2.py. Se non apportiamo modifiche o apportiamo solo modifiche a ex1.py, otteniamo il comportamento indesiderato.
C'è un modo per far sì che% run si comporti come la riga di comando qui? Questo sembra un vero problema con l'utilizzo di ipython come ambiente di test per gli script. (O forse la morale è che un modulo non dovrebbe scrivere nello spazio dei nomi di un altro modulo?)