Модули


from sys import *

Такая конструкция позволяет подключить почти все атрибуты (переменные и функции) из модуля. i Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчеркивания.

Необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имен главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.


Иерархия подключения модулей

Очень много и запутанно написано здесь , загляни, на свежую голову…


Чтобы увидеть содержимое sys.path, можно сделать так:

import sys
print(sys.path)
# или еще лучше так:
for item in sys.path:
    print(item)

Исполняемый модуль

Если кроме функций, констант и переменных в модуле прописаны и команды вне функций, то при импортировании модуля весь этот код выполнится (как обычный скрипт), при этом, все атрибуты модуля будут импортироваться (как библиотека).

Чтобы код такого модуля не выполнялся при импортировании, а отрабатывал только при запуске модуля, как скрипта - его необходимо правильно оформить.

if __name__ == '__main__':
    main()

В этом случае при импортировании интерпретатор Python не будет запускать код, вложенный в условие, но все функции библиотеки можно будет использовать.

? А будет ли импортироваться сама фунция main()?