Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

и при вызове python -OO

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

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

Ответ 3

Предварительно упакованное программное обеспечение в разных дистрибутивах 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 состоит в том, чтобы включать их как есть, нет% ореолов.

Ответ 4

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

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