使用展平命名空间重新加载python模块

时间:2012-10-04 02:12:40

标签: 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命令,同时仍然可以在单独的文件中编写兄弟函数。

1 个答案:

答案 0 :(得分:3)

__init__.py重新加载导入时导入的文件:

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

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

那就是说,依靠reload()通常是一个坏主意,如果你可以避免它。