在Django项目中只导入一次绝对导入

时间:2014-12-30 18:09:43

标签: python django python-2.7

我喜欢在Python 2.7中使用absolute_import函数。因为在Python 2.7中没有absolute_import 所以我必须像这样导入它。

from __future__ import absolute_import

在我的Django项目中,我有很多文件,比如models.py, views.py等等。在每个文件的顶部,我必须把

from __future__ import absolute_import

能够使用此功能。

问题如下: 如果有可能只在项目中导入absolute_import一次并在任何地方使用它?

2 个答案:

答案 0 :(得分:2)

频繁使用absolute_import的问题通常是由于包中的模糊性引起的。如果您正在开发多个子包并且需要经常使用absolute_import来使用顶级包,只需重命名问题子包。无论如何,这是一个好主意。

答案 1 :(得分:1)

可以重新定义由import语句调用的__import__ built-in function。这可用于模拟absolute_import的行为。您需要在导入任何内容之前执行此操作:

# This function will replace __builtin__.__import__.
# By default, the fifth argument (level) is not supplied.
# We use the value 0, which means absolute import.
def new_import(name, globals, locals, fromlist, level=0):
    # Call the original function.
    return orig_import(name, globals, locals, fromlist, level)

import __builtin__
# Save a reference to the original function.
orig_import = __builtin__.__import__
# Replace it with the new one.
__builtin__.__import__ = new_import

现在,程序中任何地方的所有import语句都会调用此函数,这将使它们执行绝对导入,除非它们明确使用相对导入语法。