Я использую Python 2.6 и имею API Facebook, установленный как пакет python (в /usr/lib64/python2.6/site-packages/facebook/...), что означает, что он доступен с равниной import facebook
или from facebook import ...
.Проблема с относительным импортом Python
Это хорошо работает, если нет столкновения имени. Например, в моем проекте, я пытаюсь импортировать API Facebook в своем коде на project.facebook с
from .facebook import GraphAPI
В моем понимании, это должно работать, потому что точка явно говорит Python искать пакет один шаг вверх в пакете hierachy и не пытайтесь импортировать пакет project.facebook, он уже разбирается.
Однако, это не работает:
Не удалось импортировать project.views. Ошибка: не может импортировать Имя GraphAPI
project.views является другим файлом исходного кода, который включает в себя project.facebook (я использую Django, но я не уверен, имеет ли он что-то делать с этим).
Я знаю, я мог бы просто переименовать исходный файл или использовать from __future__ import absolute_import
(это работает нормально), но я считаю, что это обходные пути.
Есть ли причина, по которой from .facebook import ...
не работает?
Update:
Вот выход логинсервера -R в моем каталоге рабочего пространства (который содержит PROJ в качестве единственного проекта).
Адрес/home/chris/dev/workspace/находится в каталоге/home/chris/dev/workspace /, тогда как API Facebook Python установлен на глобальном уровне (в /usr/lib64/python2.6/site-packages/facebook/...).
./proj/templates: ...
./proj/templates: ...> ./proj: README src static templates
./proj/src:
__init__.py __init__.pyc manage.py settings.py settings.pyc
settings_local.py settings_local.pyc
urls.py urls.pyc proj
./proj/src/proj:
__init__.py admin.py auth.py facebook.py forms.py halloffame.py
helper.py image.py management
middleware.pyc models.pyc openid.pyc
stats.pyc twitter.pyc urls.pyc
views.pyc
__init__.pyc admin.pyc auth.pyc facebook.pyc forms.pyc
halloffame.pyc helper.pyc image.pyc
middleware.py models.py
openid.py stats.py twitter.py
urls.py views.py
./proj/src/proj/management:
__init__.py __init__.pyc commands
./proj/src/proj/management/commands:
__init__.py __init__.pyc cronjob.py cronjob.pyc
./proj/templates: ..../proj/templates: ...
./proj/templates: ...
Можете ли вы дать более подробную информацию об относительных позициях файлов Python в исходном дереве? –
вы можете использовать команду 'ls -R' на консоли, чтобы перечислить файлы по иерархическому пути ... (включая рекурсивные подкаталоги) – shahjapan
Я отредактировал свой вопрос и включил структуру каталогов. – ChrisM