1

同様の質問をいくつか読んだことがあります。特に、これimp.load_moduleは私が望むものに近いと思われますが、なぜまだ ImportErrors が発生するのか理解できません。ここに私のフォルダ階層があります:

program\
  __init__.py
  main.py
  thirdparty\
    __init__.py
    css\
      __init__.py
      css.py
      utils\
        __init__.py
        http.py

私はmain.py次のコードを持っています。これは、thirdparty\ディレクトリを検索し、見つかった各モジュールをロードすることを目的としています。各モジュールは、独自の個別のディレクトリにあります。

import os
import imp

for root, dirs, files in os.walk("thirdparty"):
    for source in (s for s in files if s.endswith(".py")):
        name = os.path.splitext(os.path.basename(source))[0]
        m = imp.load_module(name, *imp.find_module(name, [root]))

問題はcss.py、独自のサブフォルダーを使用して、そこから物をロードすることですutils. その中に次のような行があります。

from utils import http

そして、それが失敗するところです。main.py を実行すると、このエラーが発生します。

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    m = imp.load_module(name, *imp.find_module(name, [root]))
  File "thirdparty/css/css.py", line 1, in <module>
    from utils import http
ImportError: No module named utils

私は困惑しています。css.py独自のフォルダーに自己完結型であり、css.py個別に実行すると問題なくインポートされutilsます。これは何が原因ですか?

4

1 に答える 1

0

インポートを次のように変更することで、これを解決できるかもしれません。

from .utils import http

または、インポートするフォルダーを Python パスに追加します。

sys.path.append(os.path.join(root, source))

にモジュールをインポートするときthirdparty、Python がモジュールを探す場所は依然としてメイン ディレクトリです。への正しいパスを指定したため、最初のインポートは機能しますimp.find_moduleが、その後、Python はモジュールを探す場所がわかりません。

于 2011-02-13T02:52:22.563 に答える