、という名前のパッケージがありjiva_tasks
、これをcelery経由でインポートしようとしていCELERY_IMPORTS
ます(celeryconfigの属性を使用します。celeryが使用しているimportステートメントは次のとおりです。
__import__(module, [], [], [''])
奇妙なことに、この構文を使用すると、モジュールは2回インポートされます。1回はasjiva_tasks
で、もう1回はas jiva_tasks.
(最後にピリオドがあります)です。さて、セロリが空のリストではなくグローバルで渡される可能性は高いですが、これは私には壊れているようです。間違った引数が与えられたとしても__import__
、有効なpythonモジュール名ではないものをインポートするのは奇妙に思えます。
これを修正する方法は渡すglobals
ことですが、なぜこの結果が得られるのかを理解したいと思います。これはバグですか、それともどのように機能しているかについて私が理解していないことがあり__import__
ますか?
更新:を使用すると、正常に動作しているようimportlib
です。
アップデート2:行が実行される直前のsys.meta_path
とは次のとおりです。sys.import_path
__import__
>>> sys.meta_path
[]
>>> sys.path_hooks
[<type 'zipimport.zipimporter'>]
異常なことがあるようには思えません。しかし、インポートしているパッケージがsetuptoolsのdevelopコマンドを使用してインストールされていることに気づきました。それは違いを生みますか?