Как заставить относительный импорт работать в Python, используя Eclipse с PyDev? - PullRequest
2 голосов
/ 06 октября 2011

Так что я работаю над проектом Python, который был здесь до меня в репозитории SVN.Когда я впервые вытащил ее, структура была немного странной из-за того, что она была похожа на:

Proj\
    src\
    tags\
    trunk\

А потом все внутри src \ - это файлы модуля python, кроме src \, получаетсябыть логической папкой без общего пакета внутри.В проекте нигде нет __init__.py.Поэтому я хочу реструктурировать его, по крайней мере, чтобы использовать относительный импорт через мой проект.Я также хочу настроить его так, чтобы он выглядел примерно так.

Proj\
    src\
        model\
        controller\
        view\
        test\
    tags\
    trunk\

Однако я попытался настроить его, и, независимо от того, что я делаю, он не может разрешить относительный импорт в тот момент, когда мне нужнотраверсыЯ поместил файл __init__.py в каждый пакет уровня, в том числе один в папке src \, где все они определены __all__.Тем не менее, когда я пытаюсь выполнить модульный тест в моем test \ package и выполнить команду импорта:

from ..model.foo import Foo

, чтобы попытаться импортировать класс Foo из модуля foo.py, расположенного внутри пакета модели, онне разрешаетсяНа случай, если это была проблема именно с модульными тестами, я также попробовал это с модулем в пакете контроллера, который зависел от класса в пакете модели и наоборот.Никто из них не работал.Как мне решить эту проблему?

1 Ответ

2 голосов
/ 06 октября 2011

Вы добавили корневую папку в системный путь?

import sys
sys.path.append(<place the Proj dir here>)

, тогда вы можете импортировать ее следующим образом:

from src.model.somefile import Something

Если вы не знаете абсолютный путь для Proj, вы всегда можете использовать такие комбинации, как

os.path.dirname(os.getcwdu())
...