2016-10-19 5 views
0

У меня возникла проблема с импортом модулей из относительного пути с помощью Python. Я попробовал все, что нашел в Интернете. Вот моя структура каталогов:Невозможно импортировать модули из относительного пути

starcipher/ 
    __init__.py 
    caesar.py 
    tests/ 
     __init__.py 
     test_caesar.py 

Как вы можете сказать, каталог tests/ содержит все мои модульные тесты. test_caesar.py использует класс, определенный в caesar.py. Вот мои файлы:

caesar.py:

class Caesar: 
    # Blabla 

tests/test_caesar.py:

import unittest 
from ..caesar import Caesar 

# I also tried: 
from caesar import Caesar 
from starcipher.caesar import Caesar 
from . import Caesar 
from .. import Caesar 

# Nothing works. 

class TestCaesar(unittest.TestCase): 
    # Blabla 

Я имею эту ошибку каждый раз:

Traceback (most recent call last): 
    File "test_caesar.py", line 2, in <module> 
    from ..caesar import Caesar 
SystemError: Parent module '' not loaded, cannot perform relative import 

EDIT

Вот как я бегу мой модульного тестирования:

  • В корневом каталоге: python -m unittest discover tests/
  • Или в tests/ каталоге: python test_caesar.py
  • Или даже: python -m unittest

РЕШЕНИЕ

Благодаря Pocin, удаляя __init__.py файл из каталога tests/ решил проблему!

спасибо.

+0

Вам нужно точно указать, как вы используете этот тестовый файл. –

+1

Вчера я боролся с тем же самым (только с py.test). В моем случае удаление '__init __. Py' из теста/каталога исправил его для меня –

+0

@Pocin Да! Удаление '__init __. Py' из' tests/'работал! Спасибо :) – Mathieu

ответ

0

Просто так, что решение хорошо видно, исправление должно удалить файл tests/__init__.py.

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

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