为什么不能导入一些python子模块?
例如,我无法导入子模块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')
numpy/core/setup.py
不是设计成子模块。它是NumPy构建系统的一部分。它依赖于在NumPy构建时只存在的事物,并且如果您尝试将它导入到实际安装的NumPy中,它会失败,因为它所依赖的事物不存在。
好吧,似乎它不是唯一的一个。考虑到我编辑的代码问题,我如何避免导入它?我尝试捕获ImportError异常,但仍然存在一些问题。其实,我想过滤掉那样的东西。不知道是否有可能。 – Foobard
@Foobard:可能是尴尬的特殊套管。也许你可以添加一种方法来告诉你的'get_submodules'函数跳过一些文件和文件夹。 'numpy.distutils'和任何'setup.py'文件都应该被跳过。 – user2357112
不,这不是一个解决方案。首先,因为我需要它与不同的模块一起工作。过滤出“.setup”文件并不会有太大帮助,因为还有其他模块。 – Foobard
你能显示你的代码吗? – ifconfig
并向我们显示您正在收到的确切错误消息。 –
@ifconfig我用'pkgutil.walk_packages'来列出'numpy'模块的所有子模块。然后我发现有些模块还没有导入。上面提到了其中的一些。所以基本上如果你尝试像这样导入它们:'import numpy.core.setup'你会得到一个导入错误。所以它与我正在编写的代码没有多大关系。 – Foobard