在file1.py:舊代碼已被修改
def foo():
import file2
print "I'm the old file1.py"
file2.bar()
if __name__ == '__main__':
foo()
在file2.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
,但file2.py中的new
代碼仍未被使用。
[email protected]:~/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
看到,出現在名字空間中沒有文件2模塊。但爲什麼第二次運行file1時導入不會再執行?
「IPython.lib.dreload」中的「deep reload」(或0.10.x中的「IPython.deep_reload」)可能會幫助您解決這個問題。 –
如果有人有類似的情況:我雖然我有類似的問題,除了我用普通的python(而不是解釋器模式)運行代碼。即使刪除'.pyc'文件也沒有幫助。事實證明,當我向上滾動時(使用Vi插件),只是Tmux向我展示了舊輸出。 –
你剛剛基本上每次運行一個新的'ipython'會話嗎? –