(Python) оптимальная практика относительного импорта (импорт x или из. Import x)
Я пишу свой собственный модуль mymodule
, Он содержит это:
myroot
|-mymodule
| |-file1
| |-file2
|
|-tests
| |-...
|
|-...
В file1
Я хочу импортировать file2
, Сначала я использовал from . import file2
потому что, кажется, это лучшая практика - потому что не будет проблем, если я сделаю ошибку в пространстве имен (например, когда этот файл2 имеет имя I, которое уже используется, или что-то в этом роде, и также лучше, если я хочу импортировать файлы из подмодулей).
Тогда я перешел на использование только import file2
потому что тесты имеют проблемы с этим относительным импортом. Я уже описал эту проблему здесь.
И теперь есть проблемы с импортом без .
потому что они больше не работают, когда модуль установлен. (Я установил его на свой компьютер.)
Что лучше? Как избежать проблем, которые могут быть вызваны импортом без .
? (Я знаю, я могу позаботиться о том, чтобы не использовать имена, которые уже используются. Но я с трудом могу поверить в то, что может вызвать сбой программы кого-либо еще, потому что он использовал мой модуль.
Итак, что такое лучшая практика? И почему? И если нет ничего подобного: что использовать, где?
1 ответ
Вот разница между двумя объясненными.
Это означает, что разные способы импорта отдельных частей скрипта необходимы, когда они выполняются по-разному.
Это означает, что мне нужно не решить, какой способ импорта мне следует использовать, а использовать что-то подобное:
if is_run_as_unittest:
import file2
else:
from . import file2
Так что я должен знать, является ли это тестом или нет. (Я просто предполагаю, что это работает и в том случае, если скрипт не импортирован из юнит-теста, по крайней мере, самое важное, является ли основной скрипт (или модуль верхнего уровня, как угодно) запущен как юнит-тест или нет.