我有一个名为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