2017-08-31 5 views
0

たとえば、サブモジュールnumpy.core.setupをインポートすることはできません。サブモジュールnumpy.distutils.msvc9compilerなども同様です。いくつかのPythonサブモジュールをインポートできないのはなぜですか?

EDIT:

さて、ここでのコードの断片があります。

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'モジュールのすべてのサブモジュールをリストアップしました。その後、一部のモジュールがインポートされていないことがわかりました。上記の2つは上記のとおりです。したがって、基本的に '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

関連する問題