Python: как определить, выполняется ли файл как import vs. main script?
Я пишу файл python mylib.py
Я хотел бы, чтобы mylib.py делал что-то на основе sys.argv
, если он выполняется как script. Но если он импортируется из какого-либо другого script, я не хочу, чтобы он это делал.
Как я могу узнать, импортирован ли мой файл python или какой из основных script?
(Я видел, как это делать раньше, но я забыл.)
Ответы
Ответ 1
if __name__ == '__main__':
# this was run as a main script
Вот документация на __main__
.
Обычно этот код помещается в нижней части модуля, а один общий способ сохранить ваш код в чистом виде - это создать функцию main()
, которая выполняет всю работу, и вызывать эту функцию только внутри условного выражения.
Ответ 2
if __name__ == '__main__':
# goes here only when module is being executed directly
Пакеты также могут содержать модуль __main__
, который выполняется, когда вы выполняете python -m foo
(или выполняете zip файл, содержащий пакет).
Ответ 3
Используя (размещение операторов, которые вы хотите выполнить, только когда модуль работает как main
, не импортируется)
if __name__ == "__main__":
# this was run as a main script
Обычно в этом блоке if должны быть размещены разные операторы, такие как специфический для модуля doctest вызов или печать. Вещь по умолчанию (при запуске как main) переменная ' __name__
' установлена на "__main__
", а в противном случае (если импортировано) переменная __name__
получает другое значение, скорее всего, имя модуля.