Невозможно импортировать модули из относительного пути

#python #import #module

#питон #импорт #модуль #python

Вопрос:

У меня проблема с импортом модулей из относительного пути с помощью 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
  

Редактировать

Вот как я запускаю свой модульный тест:

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

РЕШЕНИЕ

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

Спасибо.

Комментарии:

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

2. Вчера я боролся с точно такой же задачей (только с py.test). В моем случае удаление __init__.py из tests / directory исправило это для меня

3. @Pocin Да! Удаление __init__.py из tests/ сработало! Спасибо 🙂

4. Приятно это слышать! Я сходил с ума, потому что не мог понять это. Все еще не совсем уверен, почему это работает, хотя 🙂

Ответ №1:

Чтобы решение было хорошо видно, исправление заключается в удалении tests/__init__.py файла.

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