旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[Python] 用意するまで待っていろ

2008年12月10日

パッケージ周りを適当に理解してたのでハマった点。

以下のような構成で python ./test.py をすると、
“cannot import name deadlocked_a” というエラーになる。

.(カレントディレクトリ)
|-- test.py
|-- testmodules
|   |-- __init__.py
|   |-- deadlocked_a.py
|   `-- deadlocked_b.py

test.py

from testmodules import deadlocked_a

deadlocked_a.py

from testmodules import deadlocked_b

deadlocked_b.py

from testmodules import deadlocked_a # -> そんなモジュールねーよエラー

deadlocked_a の初期化中に import deadlocked_a をされると
無限に初期化が終わらなくなるので
そうならないように、初期化中のモジュールは読み込めないようになってるんですね。

今まで、超適当にimportしてた。

30分位ピヨった。

【追記】
上記のように from パッケージ import モジュール
の呼び出し方だと書いたようになるんですが、
例えば、import パッケージ.モジュール とか
from パッケージ.モジュール import * とかだと、挙動が全然違いますねー。
って、同僚に指摘されました。
この辺大事だから、まとめて動きを知りたいなと。