#python #eclipse #svn #pydev
#python #eclipse #svn #pydev
Вопрос:
Итак, я работаю над проектом 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 из module foo.py расположенная внутри пакета модели, она не разрешается. На всякий случай, если это была проблема конкретно с модульными тестами, я также попробовал это с модулем в пакете контроллера, который зависел от класса в пакете модели, и наоборот. Ни один из них не работал. Как мне решить эту проблему?
Комментарии:
1. Когда вы говорите, что это не разрешается, вы имеете в виду, что у вас ошибка при запуске модуля или у вас ошибка в PyDev?
2. Я предполагаю, что прямо сейчас это ошибка при запуске модуля, но я не хотел исключать возможность того, что, возможно, это какая-то проблема с конфигурацией PyDev.
3. Можете ли вы опубликовать возникшее у вас исключение?
Ответ №1:
Вы добавили корневую папку в свой системный путь?
import sys
sys.path.append(<place the Proj dir here>)
затем вы можете импортировать следующим образом:
from src.model.somefile import Something
Если вы не знаете абсолютный путь для Proj, вы всегда можете использовать такие комбинации, как
os.path.dirname(os.getcwd())
Комментарии:
1. Я думаю, вы имеете в виду
os.getcwd()