Импорт полного пути Python не работает между ветвями в дереве пакетов

У меня есть следующая структура проекта:

Project
  - GUI
    - ...Modules
  - Data
    - Database
      - ...Modules
    - Files
      - ...Modules
  - Utilities
    - ...Modules

И я пытаюсь сделать импорт через границы пакета, например:

в файл(модуль) Project.Database.dbdriver пытаюсь импортировать Project.Utilities.Conversions. Если я использую полностью указанный импорт, например import Project.Utilities.Conversions, это не работает, он работает с import Utilities.Conversions, т.е. я не могу указать больше пути, чем те части, которые отличаются. Однако я хотел бы использовать полностью указанные пути, одна из причин которых заключается в том, что pydev в eclipse любит их больше (в противном случае это показывает мне ошибку), вторая причина заключается в том, что я нахожу это запутанным, чтобы не делать этого.

Я наткнулся на это, но думаю, что это неправильно/не нужно здесь Как создать пакет пространства имен в Python?

Вопрос: как я могу использовать полностью указанные включения при пересечении подветвей в структуре пакета?


person ted    schedule 15.06.2012    source источник


Ответы (1)


Не удалось выполнить полностью указанный импорт, поскольку текущий рабочий каталог python (или jython) был установлен в Project. Вы можете:

добавьте родительский каталог Project в вашу библиотеку python

import sys
sys.path.append('/parent/of/project')

или просто измените рабочий каталог jython на родительский проект в настройках отладки (я не знаю, как это сделать, потому что я не использую pydev).

person acui    schedule 15.06.2012
comment
проблема была не в pydev, а в шелле, в котором я запускал проект. (вне затмения). Спасибо. - person ted; 15.06.2012
comment
в то время как ваше предложение устранило мою проблему в приложении, которое я разрабатываю, поскольку оно создало проблему в pydev, import Project.GUI as gui дает ImportError: No module named GUI, и да, есть __init__.py, и да, родительская папка проектов появляется, когда я print sys.path, прямо перед ошибкой. Но я поставлю это в другое место, так как вы решили первоначальный вопрос - person ted; 15.06.2012