Pythonでの長い経験の中で、本当に奇妙な問題が発生しています。
事前に、コードを変更する方法や修正する方法ではなく、なぜこれが発生するのかを知りたいと思います。
私はpython2.7.3を使用していて、この__future__ absolute_import
機能を使用しています。私は少し複雑なモジュール構造を持っています..私はモジュールを持っていますq.x.y.z
。一番上にある場合はimport q.x.a.b
機能import q.x.a.b as _b
しますが、qxに「a」(このモジュールの前に数回インポートされています)がないと言っても失敗します。何が起こっているのかを知るのに十分な経験がある人はいますか?as _b
「 」を削除するだけで魔法のように機能するので、循環インポートの問題ではないと確信しています。また、私はそれについて本当に注意しているので、命名の問題ではありません。
ファイル構造は次のとおりです。
q/
+ __init__.py
+ main.py #execution entry point
--- x/
+ __init__
+ a/
+ __init__
+ b.py
+ y/
+ __init__
+ z.py # import q.x.a.b
q pkg> python q \ main.pyの親フォルダーから実行され、次のものが含まれています。
from __future__ import absolute_import
import sys, os
if __name__=='__main__':
sys.path[0] = os.getcwd()
import q
q.run()
循環インポートに少し関連していますが、それでも主な質問は、「as」を使用するとなぜそれが発生するのかということです。
トレースバックは次のようになります。
q/main.py: q.run()
q/x/__init__.py : from q.x import a, y, k
q/x/a/__init__.py : from q.x.a import d, e, f
q/x/a/f.py : from q.x.y import z as _z
q/x/y/__init__.py : from q.x.y import g, h, z
q/x/y/h.py : import q.x.a.d as _d
これは何か関係がありますか? https://stackoverflow.com/a/1835089/260242 またはこの https://stackoverflow.com/a/11309252/260242
実際に失敗するコードのサンプル...test/ q / x / y / h.pyに移動し、インポートを_dとしてインポート...に変更すると、http://puu.shが表示されます 。 / 16C3j