2015-09-25 4 views
3

У меня есть проект Python 3, который структурирован так:Невозможно импортировать модуль из двойников каталога

/project 
    __init__.py 
    /models 
     __init__.py 
     my_model.py 
     base_model.py 
    /tests 
     __init__.py 
     test.py 

В test.py я хочу импортировать my_model. Моя первая попытка была from models import my_model, которая бросила ImportError: No module named 'models'. This question рекомендуется добавить файл __init__.py в каждый каталог, что не помогло. Another post сказал, чтобы изменить путь с:

import sys; import os 
sys.path.insert(0, os.path.abspath('..')) 

но выдает ошибку, когда my_model пытается импортировать из base_model.

Это кажется очень простым, но я в тупике. У кого-нибудь есть идеи?

ответ

1

Используйте абсолютный импорт везде: from project.models import my_model, должно отлично работать, где бы вы ни находились в вашем проекте, не нужно путаться с путями.

+0

Я по-прежнему получаю тот же «ImportError», когда импортирую из 'project.models'. Я трижды проверил, что корневая папка имеет '__init __. Py' и все такое. – Rob

+1

Имеет ли '' tests/'' '' __init __. Py''? Теперь я заметил, что в вашем списке отсутствует. – proycon

+0

Хотя я не обещал не путаться с путями, родительский каталог вашего проекта должен находиться в '' $ PYTHONPATH'' (или '' sys.path.insert() '' it) – proycon

0

Добавление каталога родственный к sys.path должно работать:

import sys, os 
sys.path.insert(0, os.path.abspath('../models')) 
import my_model 
1

Ответ зависит от того, как вы запустите test.py. Единственный способ, которым я знаю, относительный импорт - иметь файл в пакете. Чтобы интерпретатор Python знал, что вы в пакете, нужно каким-то образом импортировать его.

Использование:

from ..models import my_model 

в test.py

и запустить Python интерпретатора ниже папки проекта.

После этого вы сможете импортировать project.tests.test без ошибок.

+0

Я запускаю test.py напрямую из командной строки. Когда я пытаюсь 'from ..models импортировать my_model', это дает мне ошибку« родительский модуль », не загруженный, не может выполнять относительный импорт. Я убедился, что корневой каталог имеет файл '__init __. Py'. – Rob