【发布时间】:2011-03-02 07:50:25
【问题描述】:
我有一个名为 jiva_tasks 的包,我正在尝试通过 celery 导入它(使用 celeryconfig 的 CELERY_IMPORTS 属性。celery 使用的导入语句是这样的:
__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 的开发命令安装的。这有什么不同吗?
【问题讨论】:
标签: python import celery globals