Перейти до змісту

Модулі в 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', ...]
>>>

Додаткові матеріали

  1. Вікіпедія: стандартна бібліотека Python
Back to top