(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

Так что я должен знать, является ли это тестом или нет. (Я просто предполагаю, что это работает и в том случае, если скрипт не импортирован из юнит-теста, по крайней мере, самое важное, является ли основной скрипт (или модуль верхнего уровня, как угодно) запущен как юнит-тест или нет.

Другие вопросы по тегам