p
モジュールa
とb
.a
が依存するパッケージがありますb
:
b.py
コンテンツ:
import a
しかし私は確保するこれは、の任意のモジュールではなく、同じパッケージ ディレクトリからb
自分のモジュールをインポートします。a
p
a
PYTHONPATH
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 では廃止されています。