Помогите, пожалуйста, разобраться с локальным импортом. Никак не пойму, как импортировать локальный пакет.
Пример. Имеем приложение и два пакета:
.
├── main.py
├── pkg
│ └── __init__.py
└── site
└── __init__.py
var = 'some value'
from pkg import var print var
Запускаем python main.py, получаем ‘some value’. Всё ок, ожидаемо.
Меняем main.py:
from site import var print var
При запуске получаем:
Traceback (most recent call last):
File "main.py", line 2, in <module>
from site import var
ImportError: cannot import name var
Разбиремся. В интерактивном режиме:
>>> import pkg >>> pkg <module 'pkg' from 'pkg/__init__.pyc'> >>> import site >>> site <module 'site' from '/usr/lib/python2.7/site.pyc'>
Понятно, site загрузился из каталога /usr/lib/python2.7/, а не текущего.
Вопросы:
1. Почему пакет загружается не из текущего каталога, ведь sys.path выдаёт {'', ‘/usr/lib/pymodules/python2.7’, ………} - то есть первым идёт текущий.
2. Как сделать, чтобы пакет загружался из текущего местоположения?
Естественно интересует python-way решение и не обходные пути в стиле “переименуй пакет site в somethingAnother”.
PS: Код from .site import var выдаст ValueError: Attempted relative import in non-package
PPS: Python 2.7