2014-02-01 2 views
1

У меня есть эта структура файла:Импорт из файла в предыдущем пути в питона

. 
    test/db_test.py 
    models/user.py 

Я хочу импортировать user.py в db_test.py, например, я попробовать:

from ..models.user import User 

, но эта ошибка :

SystemError: Parent module '' not loaded, cannot perform relative import 

Как это сделать?

  1. все пути имеют __init__.py файл
  2. я не хочу использовать добавление в sys.path

спасибо за ответы

+0

Вам не хватает '__init __. Py' в корневом каталоге. –

+0

@BurhanKhalid, в моем корневом каталоге есть '__init __. Py' –

+0

Возможный дубликат [кошмар с относительным импортом, как работает pep 366?] (Http://stackoverflow.com/questions/2943847/nightmare-with-relative-imports -how-do-pep-366-work) –

ответ

1

Вы пытались запустить скрипт в пакете? Попробуйте выполнить следующее из каталога, содержащего пакет корневой каталог:

python -m your_package_name.test.db_test 

Мой тест, что работал было:

your_package_name/ 
    __init__.py 
    test/ 
     __init__.py 
     db_test.py 
    models/ 
     __init__.py 
     user.py 

Где "db_test.py" содержала:

from ..models.user import User 

Поэтому я запустил эту команду из родительского каталога «your_package_name».

+0

Я должен отметить, что я обычно не работаю с python 3, поэтому никаких гарантий нет. – daveydave400

+0

все сработало, но я не хочу запускать скрипт как модуль, а 'from ..models.user import User' не работает! –

+0

Если это не изменено в python 3, вы не можете использовать относительный импорт из контекста, отличного от пакета. Относительный импорт означает, что вы импортируете относительно текущего пакета/подпакета. Если вы хотите запустить его как сценарий, я думаю, вам нужно будет иметь необходимые модули в вашем sys.path. – daveydave400

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