#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
файла.
Однако я не совсем уверен, почему это работает, и было бы здорово, если бы кто-нибудь мог предоставить объяснение.