Как узнать, был ли запущен python script с использованием опции-интерпретатора -m?

Я не смог найти ответ, прочитав все следующее:

Обоснование:
Когда тест script, который использует относительный импорт, выполняется без опции -m, я мог бы напечатать предупреждающее сообщение вместо того, чтобы оставлять пользователя со стандартной трассировкой, приводящей к исключению ValueError: Attempted relative import in non-package. Не зная этого, я могу поймать это исключение, и причиной ошибки может быть только предложить отсутствие опции -m.

Ответ 1

Другое наблюдение заключается в том, что __package__ устанавливается None при непосредственном выполнении script и имени пакета при использовании -m (используя пустую строку, когда модуль не включен в какой-либо пакет, поэтому он все еще отличается от None).

Ответ 2

Отказ от ответственности: это просто наблюдение, я не видел его в документах, поэтому он, вероятно, зависит от реализации и может не быть согласованным в разных версиях Python.

Я заметил, что при вызове script с использованием опции -m в пространство имен добавляется переменная с именем __loader__, поэтому в верхней части вашего script вы можете проверить наличие этой переменной:

if '__loader__' in globals():
    # called with -m

Для дополнительной безопасности вы можете проверить, является ли __loader__ экземпляром pkgutil.ImpLoader:

if '__loader__' in globals() and __loader__.__class__.__name__ == 'ImpLoader':