2017-08-31 71 views
0

例如,我无法导入子模块numpy.core.setup,子模块numpy.distutils.msvc9compiler和其他许多模块也是如此。为什么不能导入一些python子模块?

编辑:

好了,下面的代码片段。

from importlib import import_module 
from pkgutil import walk_packages 
import sys 
import operator 


def get_attr(module, attr): 
    return operator.attrgetter(attr.split('.', 1)[1])(module) 


def isimported(module_name): 
    return module_name in sys.modules 


def get_submodules(module_name): 
    submodules = {} 
    module = import_module(module_name) 
    for loader, name, is_pkg in walk_packages(module.__path__, module.__name__ + '.'): 
     if isimported(name): 
      submodules[name] = get_attr(module, name) 
     else: 
      try: 
       submodules[name] = __import__(name) 
      except ImportError: 
       pass 

if __name__ == "__main__": 
    get_submodules('numpy') 
+0

你能显示你的代码吗? – ifconfig

+1

并向我们显示您正在收到的确切错误消息。 –

+0

@ifconfig我用'pkgutil.walk_packages'来列出'numpy'模块的所有子模块。然后我发现有些模块还没有导入。上面提到了其中的一些。所以基本上如果你尝试像这样导入它们:'import numpy.core.setup'你会得到一个导入错误。所以它与我正在编写的代码没有多大关系。 – Foobard

回答

0

numpy/core/setup.py不是设计成子模块。它是NumPy构建系统的一部分。它依赖于在NumPy构建时只存在的事物,并且如果您尝试将它导入到实际安装的NumPy中,它会失败,因为它所依赖的事物不存在。

+0

好吧,似乎它不是唯一的一个。考虑到我编辑的代码问题,我如何避免导入它?我尝试捕获ImportError异常,但仍然存在一些问题。其实,我想过滤掉那样的东西。不知道是否有可能。 – Foobard

+0

@Foobard:可能是尴尬的特殊套管。也许你可以添加一种方法来告诉你的'get_submodules'函数跳过一些文件和文件夹。 'numpy.distutils'和任何'setup.py'文件都应该被跳过。 – user2357112

+0

不,这不是一个解决方案。首先,因为我需要它与不同的模块一起工作。过滤出“.setup”文件并不会有太大帮助,因为还有其他模块。 – Foobard

相关问题