В file1.py:
def foo():
import file2
print "I'm the old file1.py"
file2.bar()
if __name__ == '__main__':
foo()
В файле2.py
print "I'm the old file2.py"
def bar():
print "I'm in the old file2.bar()"
В строке 5 интерактивного сеанса ниже, после внесения изменений в file1.py и file2.py, изменяющих все три вхождения слова old
на new
, код new
в file2.py все еще не используемый.
wim@wim-ubuntu:~/sandpit$ ipython
>>> run file1.py
I'm the old file2.py
I'm the old file1.py
I'm in the old file2.bar()
>>> !rm file2.pyc
>>> # modify file1, file2
>>> run file1.py
I'm the new file1.py
I'm in the old file2.bar()
Откуда он получает старый код из file2.py?
Я должен что-то неправильно понять, потому что подумал (из справки ipython по run
):
Файл выполняется в пространстве имен, изначально состоящем только из
__name__ == '__main__'
и sys.argv
построены, как указано. Это таким образом
видит свою среду так, как будто она запускается как отдельная программа
Я удалил файл .pyc и по команде whos
вижу, что в пространстве имен нет модуля file2. Но почему импорт не выполняется снова при повторном запуске file1?