2014-12-30 2 views
2

Мне нравится использовать функцию absolute_import в Python 2.7. Потому что в Python 2.7 нет absolute_import Так что мне нужно импортировать его вот так.Импорт абсолютного импорта только один раз в проект Django

from __future__ import absolute_import

В моем проекте Django У меня есть много файлов, как models.py, views.py и так далее. И на вершине каждого файла я должен поставить

from __future__ import absolute_import

, чтобы иметь возможность использовать эту функцию.

Вопрос следующий: Если есть возможность импортировать absolute_import только один раз в проект и использовать его везде?

+2

Что именно означает «импорт только один раз»? Python импортирует модуль только один раз, если вы явно не перезагружаете() 'it или не используете какую-либо другую функцию импорта. – cpburnz

+0

Но зачем это нужно в каждой упаковке? В большинстве случаев нет никакой разницы, используете ли вы один режим или другой. Это становится актуальным только в том случае, если у вас есть двусмысленность. – newtover

+0

У меня есть проект Django, и я бы хотел использовать absolute_import в каждом файле, например 'views.py',' forms.py' и т. Д. Каждого модуля в проекте – micgeronimo

ответ

2

Проблема с частым использованием absolute_import обычно вызвана двусмысленностью внутри пакета. Если вы разрабатываете несколько подпакетов и вам необходимо постоянно использовать absolute_import для использования пакета верхнего уровня, просто переименуйте подпакет проблем. В любом случае это хорошая идея.

+1

милый я совершенно не понял, о чем он говорил –

1

Можно переопределить __import__ built-in function, на который ссылаются import инструкций. Это можно использовать для эмуляции поведения 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 заявления в любом месте в программе будет вызывать эту функцию, которая заставит их производить абсолютный импорт, если они явно не использовать синтаксис относительного импорта.

Смежные вопросы