2017-01-08 2 views
0

Я почти уверен, что мне не хватает чего-то очевидного, но импорт меня мучил некоторое время.Django не может импортировать файл в подкаталог

Я имею следующую структуру приложения в более крупном проекте Django:

\reporting\ 
\reporting\__init__.py 
\reporting\<all other default django files> 
\reporting\utils\__init__.py 
\reporting\utils\base_file.py 
\reporting\utils\appname_reporting.py 

Я пытаюсь импортировать appname_reporting к моим \reporting\views.py.

Я пробовал import utils.appname_reporting, from utils import appname_reporting и from .utils import appname_reporting. Все они дают мне ошибку: ImportError: No module named 'appname_reporting'.

Нет файлов, импортирующих appname_reporting.py. И appname_reporting.py импорт base_file.py.

Update

Я получил appname_reporting импортировать в views.py, но теперь у меня есть сломанный импорт в appname_reporting говоря, что это не может импортировать base_file. Там у меня есть import base_file, и это не удается в моих тестах. Я также пробовал import .base_file, и он терпит неудачу.

+0

Полная трассировка обычно очень важна .. – thebjorn

ответ

0

В переменной PYTHONPATH вы должны иметь /reporting. Убедитесь, что он включен в выходе

import sys 
for p in sys.path: 
    print p 

После этого вы можете использовать относительный импорт:

appname_reporting.py: 
from . import base_file 

views.py 
from .utils import appname_reporting 

Следите за круговой импорт, однако (например, если вы импортируете что-то в __init__.py файлах) ,

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

python -v views.py 

, чтобы увидеть, что импортируется, и в каком порядке. Он скажет вам, есть ли у вас круговой импорт.

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