、という名前のパッケージがあり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コマンドを使用してインストールされていることに気づきました。それは違いを生みますか?