2017-04-21 112 views
0

我的工作與樹冠Python項目,用我自己的圖書館,這是我從一次修改時間更改或添加里面的功能。需要重新加載庫在Python中,有雨棚

myfile.py開頭,我有from my_library import *,但是如果我在這個庫中改變一個函數並且再次計算myfile.py,它會繼續使用我的函數以前的版本。

我試過reload功能:

import my_library 
reload(my_library) 
from other_python_file import * 
from my_library import * 

,它使用我最近改變了圖書館。

但如果是:

import my_library 
reload(my_library) 
from my_library import * 
from other_python_file import * 

它給我的結果,由於版本加載我第一次推出myfile.py

爲什麼會出現不同的結果反轉第3和第4行?

+0

可能重複的[如何卸載(重新加載)Python模塊?](http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module) – Styrke

+0

可能複製[刷新Python模塊(http://stackoverflow.com/questions/27899348/reload-python-module) –

+0

@Simakis帕納約蒂斯的:在你提到的問題,問題是,有沒有「進口my_module」但我把它。這不是同一個問題。 – trapuck

回答

0

沒有看到源代碼,這是很難肯定。 (爲了將來的參考,這是最有用的發佈一個最小的例子,我懷疑這將是約10行代碼在這種情況下)。

然而,從你對問題的描述,我的猜測是,你的other_python_file也進口my_library。所以,當你做from other_python_file import *,你也導入,它已經從my_library,這在你的第二個例子,從my_library直接替代進口進口的一切(因爲你沒重裝other_python_file,它仍然會採用以前的版本)

這是大約十幾個理由中的一個,爲什麼你幾乎不應該使用from xxx import *這種形式,除了在交互模式下飛行(甚至在那裏它可能是危險的,但可能是值得的方便折衷) 。在一個python源文件中,這種做法沒有類似的理由。請參閱Imports section of PEP-8中的最後一點。

+0

(編輯答案解釋爲什麼other_python_file仍然使用my_library的先前版本) –