2017-08-31 49 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

相關問題