Виконання модулів і пакетів
Початковий код, розміщений у модулях і пакетах, як вбудованих, так і вже встановлених сторонніх, можна запустити на виконання.
Модуль як скрипт
Щоб запустити на виконання певний модуль
інтерпретатору треба вказати спеціальну опцію -m
і далі ім'я самого модуля.
Наприклад:
c:\>python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
У цьому випадку змінна __name__
всередині модуля буде мати спеціальне значення __main__
.
Це дозволяє визначити блок коду, який буде виконано лише у тому випадку,
коли ваш модуль було запущено як скрипт:
# модуль usefull
def f():
pass
def test():
assert f() == None
if __name__ == '__main__':
print('Running test')
test()
print('OK')
Пакет як скрипт
Пакет, як і модуль, теж може бути запущеним самостійно
шляхом передачі його в якості аргумента інтерпретатору Python.
Для цього пакет повинен містити файл __main__.py
.
Саме цей файл і буде виконано!
Але перед цим буде виконано ще й __init__.py
!
Чому так?
Тому що __main__.py
вважається пакетом модудів,
а перед тим, як виконати пакет,
необхідно ініціалізувати модуль.
"Компіляція" байт-кода
Є можливість "примусово" створити байт-код для певного модуля. Для цього інтерпретатору передають ім'я модуля і вказують додаткові опції:
-O
— ця опція змушує інтерпретатор компілювати так званий оптимізований байт-код який зберігається у файлах з розширенням.pyo
. З кода видаляютьсяassert
, ігнорується умовний дебаг,.pyc
- файли ігноруються.-OO
— те ж саме, плюс видаляються коментарі.