Когда вы пишете библиотеку python и хотите импортировать в нее один модуль из другого, что это правильный способ сделать это, чтобы импорт работал как при импорте библиотеки извне, так и при выполнении некоторых модульных тестов из библиотечный каталог?Каков правильный способ импорта модулей в библиотеку python?
Если вы
import some_module
from some_module import something
он работает при запуске из библиотеки directoy, но при ввозе из-за пределов, производит ImportError: No module named 'some_module'
.
Вы можете сделать
from . import some_module
import my_library.some_other_module
from .some_module import something
, но это не будет работать, если вы импортировать библиотеку из UnitTest помещенной в том же каталоге.
И, наконец, вы можете играть с sys.path
и/или переместить модульные тесты в другой каталог.
Какое оптимальное решение?
Редактировать: Просто, чтобы было ясно, я хотел бы запустить unittests, используя python -m unittest
в верхней папке библиотеки. До сих пор я сделал это, добавив
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
в начало тестовых файлов устройства. В качестве альтернативы можно написать короткий сценарий оболочки, который добавит родительский каталог в PYTHONPATH
, а затем запустит unittests. Интересно, есть ли лучшие способы справиться с этим?
Воспроизведение с помощью 'PYTHONPATH' вместо' sys.path' возможно ... –