2012-10-04 44 views
1

重裝Python模塊我有相似的結構SciPy的/ numpy的,在這裏你有幾個主要子模塊的封裝,並且每個子模塊包含從已經被夷爲平地到同一個命名空間中的各種文件的功能。比方說,帶有扁平的命名空間

package/ 
    sub1/ 
    __init__.py 
    file1.py 
    file2.py 

然後sub1/__init__.py看起來是這樣的:

from .file1 import func1, func2 
from .file2 import func3 

結果是我可以做的

import package.sub1 
package.sub1.func1() 

然而,問題在於以下不起作用:

>>> import package.sub1 
-- change things in file1.py -- 
>>> reload(package.sub1) 

該功能不會更新。它的工作原理,如果我做import package.sub1.file1代替,所以也有一些是用扁平的命名空間,這使得它失去了模塊的連接。我的主要問題是如何仍然可以使用reload命令,同時還獲得了能夠寫兄弟姐妹的功能在不同的文件的好處。

回答

3

充分利用__init__.py重新加載時,它導入它導入文件:

import file1 
import file2 
reload(file1) 
reload(file2) 

func1, func2 = file1.func1, file1.func2 
func3 = file2.func3 

也就是說,依靠reload()通常是一個壞主意,如果你能避免它。

+0

這是一個可行的解決方案,謝謝!我只想'reload()'在開發過程中的交互式iPython會話期間工作,所以最終的包不會依賴它。 –