Модулі в Python
Python дозволяє розмістити класи, функції або дані в окремому файлі і використовувати їх в інших програмах. Файл, який містить початковий код на Python, є модулем. Об'єкти з модуля можуть бути імпортовані в інші модулі.
Им'я файла утворюється додаванням до імені модуля розширення .py
.
При імпорті модуля інтерпретатор шукає файл спочатку у поточному каталозі, потім у каталогах, вказаних у змінній середовища PYTHONPATH
, потім у залежних від платформи шляхах за замовчуванням.
Ми можемо внести зміни в PYTHONPATH
додавши туди свій шлях.
Каталоги, в яких здійснюється пошук, можна подивитись у змінній sys.path
.
Також можна додати свій каталог для пошуку:
>>> import sys
>>> sys.path
['C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Users\\Ruiner\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Python36\\lib\\site-packages', 'C:\\Python36\\lib\\site-packages\\win32', 'C:\\Python36\\lib\\site-packages\\win32\\lib', 'C:\\Python36\\lib\\site-packages\\Pythonwin']
>>> sys.path.append('my\\lib\\python')
Великі програми, як правило, складаються з стартового файла — файла верхнього рівня, і набора файлів-модулей. Головний файл займається контролем програми.
Для прискорення запуска програм модулі може бути зкомпільовано в байт-код.
Скомпільовані модулі містяться у каталозі __pycache__
у файлах з розширенням .pyc
.
Ім'я файла складається з імені модуля і версії інтерпретатора. Типове ім'я файла зі скомпільованим модулем виглядає так:
module1.cpython-36.pyc
Компіляція модуля відбувається при імпортуванні цього модуля у таких випадках:
- якщо до даного модуля ще не існує файла зі скомпільованим байт-кодом.
- якщо файл з модулем створено пізніше ніж файл з байт-кодом.
Зкомпільований байт-код є платформо-незалежним, але може бути різним для різних версій інтерпретатора.
Модуль може завантажуватись з файлів з розширенням .pyc
або .pyo
навіть якщо файла з розширенням .py
не існує.
Це може допомогти приховати ваш початковий код якщо ви, наприклад, не хочете розповсюджувати його. Але це зовсім не є дієвим методом захисту програм.
Зауважимо, що інтерпретатор Python також може завантажувати бінарний код, який зібрано за допомогою мови C
(файлb з розширенням .so
в Linux або .dll
в Windows) і навіть Java-класи зыбраны за допомогою Jython.
Стандартні модулі
Python розповсюджується з бібліотекою стандартних модулів. Бібліотека включає в себе більш ніж 200 модулів, які виконують платформо-залежну підтримку таких задач, як:
- інтерфейс до операційної системи
- керування об'єктами
- пошук
- мережа + Інтернет
- графічний інтерфейс користувача
і ще багато іншого. Повний список стандартних модулів можна подивитись у документації.
Частину модулів вбудовано в інтерпретатор за замовчуванням. Це зроблено з міркувань ефективності або для забезпечення доступа до примітивів операційної системы — наприклад, модуль sys
.
Функція dir()
Вбудована функція dir()
використовується для отримання імен, які визначено в модулі. Вона повертає відсортований список рядків:
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', .... ]
Без аргументів функція dir()
повертає список імен, які визначено в даний момент:
>>> import json
>>> res = json.dumps([1, 2, 3])
>>> dir()
['__annotations__', '__builtins__', '__cached__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'json', 'res']
>>>
Результат функції dir()
не містить вбудованих функцій і змінних. Отримати їх список можна зі стандартного модуля builtins
:
>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', ...]
>>>