我有一个名为 的包jiva_tasks
,我试图通过 celery 导入它(使用 celeryconfig 的CELERY_IMPORTS
属性。celery 使用的导入语句是这样的:
__import__(module, [], [], [''])
奇怪的是,当使用这种语法时,模块会被导入两次,一次 as jiva_tasks
,另一次 as jiva_tasks.
(末尾有句点)。现在,芹菜很有可能应该传入全局变量而不是一个空列表,但这对我来说似乎很糟糕。奇怪的是,即使给出了错误的参数,__import__
也会导入不是有效的 python 模块名称的东西。
我知道解决这个问题的方法是通过globals
,但我想了解为什么我会得到这个结果。这是一个错误,还是我不明白它__import__
是如何工作的?
更新:如果我使用它似乎也可以正常工作importlib
。
更新 2:这是执行该行之前的sys.meta_path
and :sys.import_path
__import__
>>> sys.meta_path
[]
>>> sys.path_hooks
[<type 'zipimport.zipimporter'>]
在我看来,没有什么不寻常的地方。但是,我刚刚意识到我正在导入的包是使用 setuptools 的开发命令安装的。这有什么区别吗?