それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

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

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

以下のような構成で 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 * とかだと、挙動が全然違いますねー。
って、同僚に指摘されました。
この辺大事だから、まとめて動きを知りたいなと。


コメントを残す

メールアドレスが公開されることはありません。

Categories

Archives