2015-07-14 8 views
2

Можно ли импортировать модуль того же пакета с псевдонимом, используя относительный импорт?python: псевдоним для относительного импорта

Скажем, у меня есть следующая структура пакета:

lib/ 
    foobar/ 
     __init__.py 
     foo.py 
     bar.py 

И в foo.py, я хотел бы использовать что-то из bar.py, но я хотел бы использовать его в качестве «бар. my_function ", поэтому вместо from .bar import my_function я пробовал import .bar as bar и import .bar, оба из которых не работают (исключение исключений синтаксиса). Я пробовал как pythhon2.7, так и python3.4 (последняя - моя целевая версия).

Однако, что работает, и что я сейчас использую, это import foobar.bar as bar, то есть абсолютный импорт вместо относительного. Это решение ОК, учитывая, что я не ожидаю, что имя пакета изменится (и даже если это произойдет, в коде немного изменить), но было бы неплохо, если бы я смог добиться этого, используя относительный импорт!

Резюме:

#import .bar as bar # why not?!? 
#import .bar # shot in the dark 
import foobar.bar as bar # current solution 

ответ

6

Вы должны использовать

from . import bar 

The documentation состояния относительно этого

[...] вы можете написать явного относительно импорта с from module import name формы оператора импорта. Эти явные относительные импорты используют ведущие точки для указания текущих и родительских пакетов, участвующих в относительном импорте. [...]

+0

Конечно, должно было осознать это сам! * facepalm * Но хорошо, задним числом легче, чем предвидение. Спасибо за Ваш ответ! – flotzilla