0

パッケージを作成しました。使いやすさのために、packageAと呼びます。

このパッケージには、(個別のファイル)に4つのサブモジュールとinitファイルがあるため、パッケージには次のファイルが含まれています。

  • __init__.py
  • moduleA.py
  • moduleB.py
  • moduleC.py
  • moduleD.py

モジュールBDはスタンドアロンであり、他のローカルモジュールをインポートしません。モジュールAはモジュールBDをインポートします。

これで、インポートしたいスクリプトができましたpackageA。これまでのところ、init.pyは空です。

import packageA

問題なく動作します。ただし、moduleAはこのインポートからは利用できません。packageA.moduleAを介して使用する場合は、次のエラーが発生します。

AttributeError: 'module' object has no attribute

以下も問題なく動作します。

from packageA import moduleB
from packageA import moduleC
from packageA import moduleD

そして次のインポートはImportErrorを引き起こします:

from packageA import moduleA

このエラーが発生します:

Traceback (most recent call last):
File "run.py", line 19, in <module>
from packageA import moduleA
ImportError: cannot import name moduleA

moduleAで間違ったことをしているのではないかと思いましたが、moduleAが空であっても、インポートによって同じエラーが発生します。このモジュールはどういうわけかインポートできないようです。これはどのように可能ですか?

私はすべてのPythonモジュール用に個別の単体テストファイルを持っていますが、はい、moduleAはエラーなしで正しく動作しています。

4

1 に答える 1

2

おそらく、別の場所から別のバージョンのパッケージをインポートしています。スクリプトでこれを試して、正しいものであることを確認してください。ファイルのフルパスが出力され__init__.pyます。

import packageA
print packageA.__file__

また、パッケージのモジュール検索パスが変更されていないかどうかを確認してください。通常、これは1つの要素、パッケージのディレクトリパスを含むリストです。

print packageA.__path__
于 2012-10-04T18:00:08.890 に答える