python:在包命名空间中导入模块

时间:2013-10-17 08:46:48

标签: python scipy python-import

我想知道是否有一些标准的方法来做像

这样的事情
import scipy as sp
from scipy import interpolate as sp.interpolate

是不允许的。

具体做法是:

  1. 我想知道是否有一些理由不允许上述内容。如果我正在开发自己的软件包foo,那么尽可能少地污染其名称空间似乎是合理的。

  2. 这样的事情
    import scipy as sp
    __import__('scipy.interpolate')
    

    完成这项工作,但并不是那么好,文档建议不要使用__import__,除非严格要求。类似地

    import importlib
    import scipy as sp
    importlib.import_module('scipy.interpolate',sp)
    
  3. 完成这项工作,但它仍然很难看,甚至更长,并将importlib放入命名空间......

1 个答案:

答案 0 :(得分:0)

导入的模块被视为常规对象,因此如果您真的想要,可以导入模块并将其分配给任意变量,如此

import scipy as sp
from scipy import interpolate 
sp.interpolate = interpolate

sp.interpolate将按预期运行,只要您调用sp.interpolate,它就会指向插值模块。它们是同一个对象,即

print sp.interpolate is interpolate
>>> True

然后最终删除原始的'interpolate'指针调用

del interpolate