2013-06-08 3 views
0

У меня естьПочему мои модульные тесты не выполняются на Python?

myapp/ 
    __init__.py 
    lib.py 
    tests/ 
     lib_test.py 

В lib_test.py у меня есть:

import lib 

При работе с MyApp:

python tests/lib_test.py 

Я получаю сообщение об ошибке

ImportError: No module named lib 

Это какой-то вроде бы быть ошибка ginner без сомнения. Однако я не могу понять, что происходит не так.

ответ

5

Когда вы пытаетесь сделать import lib, как у вас выше, Python пытается найти импорт, начиная с каталога вы находитесь (так, например, если вы были правы в каталоге myapp, он нашел бы lib.py и быть способный к import lib). Однако при импорте в пакет (в основном, с __init__.py) вы должны пойти на использование явного импорта пакетов (например, from myapp import lib), чтобы интерпретатор python знал, где искать. Это также имеет преимущество, заключающееся в том, чтобы избежать столкновений пространства имен с lib (т. Е. Если вы были в другой папке с lib.py).

Нижняя линия: замените import lib на from myapp import lib, и вы будете хорошо.

+0

Лично я предпочитаю [относительный импорт] (http://www.python.org/dev/peps/pep-0366/): 'from .. import lib'. Для этого требуется файл '__init __. Py' в каталоге' tests'. –

1

Вы должны добавить __init__.py файл в tests/.

+0

Благодарим вас за отличное предложение. К сожалению, я все еще получаю ту же ошибку – Hoa

+0

Не могли бы вы попробовать это «из myapp import lib» в файле lib_test.py. –

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