оптимизированный для python режим

Python может запускать скрипт в оптимизированном режиме (-O), который отключает отладки, такие как assert, и если я помню, также удаляю docstrings. Я не видел, что он действительно используется, и, возможно, это просто артефакт прошлых времен. Используется ли он? Зачем?

Почему это не бесполезная вещь удаляется в Python 3?

Он сохраняет небольшой объем памяти и небольшой объем дискового пространства, если вы распространяете любую архивную форму, содержащую только файлы .pyo . (Если вы пользуетесь assert много, и, возможно, со сложными условиями, экономия может быть не тривиальной и может также увеличиться до времени выполнения).

Таким образом, это определенно не бесполезно – и, конечно же, оно используется (если вы разворачиваете серверную программу на основе Python на огромное количество N серверных машин, почему бы вам не захотеть тратить N * X байт, чтобы сохранить докстроны, которых никто, когда-либо, в любом случае мог бы получить доступ ?!). Конечно, было бы лучше, если бы он спасся еще больше, но, эй, не тратьте, не хочу! -)

Таким образом, это не так просто, чтобы сохранить эту функциональность (которая в любом случае тривиально проста для обеспечения, вы знаете;) в Python 3 – зачем добавлять даже «epsilon» к последним усыновлениям? -)

В настоящее время python -O выполняет следующие действия:

  • полностью игнорирует утверждения
  • устанавливает специальное встроенное имя __debug__ в значение False (которое по умолчанию имеет значение True)

и когда вызывается как python -OO

  • удаляет docstrings из кода

Я не знаю, почему все забывают упомянуть проблему __debug__ ; возможно, это потому, что я единственный, кто его использует :). if __debug__ конструкция if __debug__ не создает байт-код при работе под -O , и я считаю это очень полезным.

Предварительно упакованное программное обеспечение в разных дистрибутивах Linux часто байт-скомпилировано с -O. Например, это, если из правил упаковки Fedora для приложений python:

Раньше было обычной практикой для файлов% ghost .pyo, чтобы сохранить небольшое количество места в файловой системе пользователей. Однако это имеет две проблемы: 1. С SELinux, если пользователь запускает python -O [APP], он попытается написать .pyos, когда он не существует. Это приводит к записи записей AVC в журналах. 2. Если системный администратор запускает python -OO [APP], .pyos будут созданы без докстрон. Для некоторых программ требуются docstrings. При последующих запусках с python -O [APP] python будет использовать кешированные .pyos, хотя был запрошен другой уровень оптимизации. Единственный способ исправить это – выяснить, где находятся .pyos и удалить их.

Текущий метод работы с файлами pyo состоит в том, чтобы включать их как есть, нет% ореолов.

Удаление утверждений означает небольшое преимущество в производительности, поэтому вы можете использовать это для «выпуска» кода. В любом случае, никто не использует его, потому что многие библиотеки Python открыты и, следовательно, функция help() должна работать.

Итак, пока в этом режиме нет реальной оптимизации, вы можете игнорировать его.