我有一個名爲jiva_tasks
包,我想通過芹菜導入(使用celeryconfig的CELERY_IMPORTS
的屬性,芹菜使用import語句是這樣的:這是__import__功能是否正確? 。
__import__(module, [], [], [''])
奇怪的是,當這個語法是使用時,模塊獲取導入兩次,一次爲jiva_tasks
,另一次爲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命令安裝的。這有什麼區別嗎?
我沒想到關於進口鉤子。雖然''__import__'調用時,'foo.' * *好像正在sys.modules中註冊。 – 2010-06-15 14:24:24
如果'__import __()'增加了'foo.',那麼讓我們來看看導入鉤子!向你的問題添加「sys.metapath」和「sys.path_hooks」打印輸出,如果你發現任何問題,請嘗試與我們分享他們的代碼。 – 2010-06-16 03:44:33
已更新。它看起來並不像我有任何不尋常的導入鉤子。 – 2010-06-16 13:47:12