web-dev-qa-db-ja.com

Python 3?の現在のディレクトリにあるファイルからインポートするにはどうすればよいですか?

python 2では、次のようなモジュールを作成できます。

parent
->module
  ->__init__.py (init calls 'from file import ClassName')
    file.py
    ->class ClassName(obj)

そして、これは機能します。 python 3コマンドインタプリタから同じことを行うことができ、動作します(編集:インタプリタを実行しているのと同じディレクトリにいたため、これは動作しました)。 pyと同じことを次のように行います:

"""__init__.py"""
from file import ClassName

"""file.py"""
class ClassName(object): ...etc etc

ImportErrorが発生します。名前「ClassName」をインポートできません。「file」がまったく表示されません。直接参照することですべてをインポートできますが、モジュールをインポートするとすぐにこれが行われます(残りのコードベースと完全に矛盾しているため、これは行いたくありません)。何が得られますか?

15
user5076297

python 3では、インポートを実行するための相対パスが指定されていない限り、すべてのインポートは絶対です。絶対インポートまたは相対インポートを使用する必要があります。

絶対インポート:

from parent.file import ClassName

相対的なインポート:

from . file import ClassName
# look for the module file in same directory as the current module
26
Dunes

この方法でインポートしてみてください:

from .file import ClassName

こちら python 3のインポートに関する「Guidoの決定」に関する詳細と、python 3。

17
doru