2

これを行うことは良い考えではないことに注意してください。これは紛らわしく、エラーが発生しやすく、通常はまったく不要です。

しかし、議論のために、グローバル パッケージと同じ名前のローカル パッケージがあるとします。

module/
   __init__.py
   os.py
   thisfile.py

内部では、次のいずれかを使用して、ローカルバージョンのthisfile.pyをインポートすることを明示的に指定できます。os.py

from . import os
from .os import foo

しかし実際には、python 2.x では、ローカル パッケージ解決がデフォルトです。システムパッケージの代わりにimport osローカルをロードするだけです。os.py

では、ローカルで定義された代替パッケージではなくthisfile.py、システムレベルのパッケージを内部でインポートするにはどうすればよいでしょうか?os

4

2 に答える 2

6

この動作は python2 固有です。Python3 では、この種の問題を正確に修正するために、インポートはデフォルトで絶対的です。

python2.5+ *では、将来のインポートを使用してこの動作を修正できます。

from __future__ import absolute_import

その後、すべてのインポートは絶対になり、最上位モジュールと同じ名前のモジュールをインポートするには、明示的な相対インポート構文を使用する必要があります。

さらなる背景については、 PEP 328を参照してください。


*編集: 以前のバージョンの Python では、トップ レベルのモジュールが最初に見つかるように変更することが唯一のオプションsys.pathでした。これは実際にはひどい解決策です。

于 2013-08-21T23:02:19.757 に答える
1

あなたはそれを逆に持っています。

# Absolute import
import os

# Relative import
from . import os

ドキュメント: http://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

古い Python (3.0 未満のすべて) バージョンでは、手動で有効にする必要があります。すべての__future__機能のリストを次に示します。

Python 2.5-2.x の場合:

from __future__ import absolute_import
于 2013-08-21T23:01:48.390 に答える