現在のディレクトリからモジュールを強制的にインポートする 質問する

現在のディレクトリからモジュールを強制的にインポートする 質問する

pモジュールab.aが依存するパッケージがありますb:

b.pyコンテンツ:

import a

しかし私は確保するこれは、の任意のモジュールではなく、同じパッケージ ディレクトリからb自分のモジュールをインポートします。apaPYTHONPATH

b.pyそこで、次のように変更しようとしています。

from . import a

bこれは、パッケージ ディレクトリの外にいるときにインポートする限り機能しますp。次のファイルがあるとします。

/tmp
    /p
       a.py
       b.py
       __init__.py

以下の作品:

$ cd /tmp
$ echo 'import p.b' | python

以下は機能しません:

$ cd /tmp/p
$ echo 'import b' | python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "b.py", line 1, in <module>
    from . import a
ValueError: Attempted relative import in non-package

なぜ?

PS 私はPython 2.7.3を使用しています

ベストアンサー1

Pythonを再読した後輸入書類私の元の問題に対する正しい答えは次のとおりです。

bが独自のパッケージからインポートされるようにするには、aに次のように記述するだけで十分ですb

import a

以下はドキュメントからの引用です:

サブモジュールは相互参照を必要とすることがよくあります。たとえば、サラウンドモジュールはエコーモジュールを使用する場合があります。実際、このような参照は非常に一般的であるため、インポート ステートメントは標準モジュール検索パスを検索する前に、まずそれを含むパッケージを検索します。

注記:JF Sebastian が以下のコメントで示唆しているように、暗黙的なインポートの使用は推奨されておらず、実際、Python 3 では廃止されています。

おすすめ記事