關於重新導入SO有很多問題和答案,但它似乎都非常違反直覺,不知道背後的機制。爲什麼你不能在Python中重新導入?
如果導入模塊,改變的內容,然後嘗試再次導入它,你會發現,第二進口沒有任何效果:
>>> import foo # foo.py contains: bar = 'original'
>>> print foo.bar
original
>>> # edit foo.py and change to: bar = 'changed'
>>> import foo
>>> print foo.bar
original
我是一個很快樂的人,當我發現reload
:
>>> reload(foo)
>>> print foo.bar
changed
但是還有當你正從一個模塊項目不容易解決,而不用導入模塊本身:
>>> from foo import baz
>>> print baz
original
>>> # change foo.py from baz = 'original' to baz = 'changed'
>>> from foo import baz
>>> print baz
original
>>> reload(foo)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
reload(foo)
NameError: name 'foo' is not defined
爲什麼當您給它一個新的import
語句時Python不會更新導入的項目?
如果你想在你的Python系統中自動重載系統PHP,可以考慮fork-loop:http://opensourcehacker.com/2011/11/08/sauna-reload-the-most-awesomely-named- python-package-ever/ – 2012-07-23 18:59:22
@MikkoOhtamaa,導致問題的用例不同,特別是從交互式會話更新和測試模塊。這個交互式會話有我不想扔掉的數據。 – 2012-07-23 19:05:01