2010-09-24 5 views
0

Я использую 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: ... 
+0

Можете ли вы дать более подробную информацию об относительных позициях файлов Python в исходном дереве? –

+0

вы можете использовать команду 'ls -R' на консоли, чтобы перечислить файлы по иерархическому пути ... (включая рекурсивные подкаталоги) – shahjapan

+0

Я отредактировал свой вопрос и включил структуру каталогов. – ChrisM

ответ

0

Видимо (по http://docs.python.org/whatsnew/2.5.html#pep-328), есть не путь вокруг from __future__ import absolute_import, так что я думаю, я просто должен быть доволен тем, что __future__ импорт разрешить мое имя затенения проблемы.

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