Что такое стандартная библиотека Python и как она устроена

Ответ

Стандартная библиотека Python — это набор модулей, который поставляется вместе с интерпретатором и доступен «из коробки» без дополнительной установки.

Она состоит из двух типов модулей:

  1. Написанные на Python (.py файлы): Модули, такие как os, json или collections, хранятся в папке Lib в директории установки Python.
  2. Реализованные на C (скомпилированные .pyd или .so файлы): Модули, критичные к производительности, например math или itertools, написаны на C для максимальной скорости выполнения. Они встроены непосредственно в интерпретатор.

Почему такое разделение? Модули на C используются для задач, требующих высокой производительности (математические вычисления, работа с бинарными данными), в то время как модули на Python обеспечивают гибкость и простоту поддержки.

Пример исследования:

import sys
import os
import math

# Показывает имена модулей, скомпилированных в интерпретатор
print(sys.builtin_module_names)
# >>> ('_abc', '_ast', '_codecs', ..., 'sys', 'time', 'math')

# Путь к файлу модуля, написанного на Python
print(os.__file__)
# >>> '.../lib/python3.9/os.py'

# Встроенные модули не имеют файла .py
try:
    print(math.__file__)
except AttributeError as e:
    print(e)
# >>> 'module 'math' has no attribute '__file__'

Ответ 18+ 🔞

А, слушай, вот тебе про стандартную библиотеку Питона, это же просто праздник какой-то, блядь!

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

А состоит эта радость из двух сортов, так сказать:

  1. Те, что на самом Питоне написаны (файлы .py). Ну, типа os, json — они просто лежат в папке Lib у тебя на компе, как обычные текстовые файлы. Можно даже залезть и посмотреть, как они там внутри устроены, если мозгов не жалко.
  2. А вот эти — на Си скомпилированные (файлы .pyd или .so). Это уже серьёзные пацаны, вроде math или itertools. Они прямо внутрь интерпретатора вшиты, на максимальной скорости работают, потому что там вычисления всякие, где каждый наносекунд на счету.

А зачем, спрашивается, такое разделение, ёпта? Да всё просто, как три копейки! Модули на Си — это когда надо, чтобы всё летало, как угорелое. А модули на Питоне — для гибкости, чтобы можно было легко код править и поддерживать, не вникая в эти твои сишные дебри.

Ну и примерчик, чтобы не быть голословным:

import sys
import os
import math

# Смотри, какие модули прямо в ядро интерпретатора вшиты, как гвозди
print(sys.builtin_module_names)
# >>> ('_abc', '_ast', '_codecs', ..., 'sys', 'time', 'math')

# А вот обычный модуль на Питоне — у него есть файлик
print(os.__file__)
# >>> '.../lib/python3.9/os.py'

# А встроенные модули — они как призраки, файла у них нет!
try:
    print(math.__file__)
except AttributeError as e:
    print(e)
# >>> 'module 'math' has no attribute '__file__'

Вот и вся магия, блядь. Одни модули — как открытая книга, другие — как зашифрованная записка от шпиона, в рот меня чих-пых!