оптимизированный режим Python - PullRequest
27 голосов
/ 13 января 2010

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

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

Ответы [ 4 ]

45 голосов
/ 30 января 2010

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

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

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

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

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

33 голосов
/ 18 января 2010

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

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

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

6 голосов
/ 13 января 2010

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

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

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

4 голосов
/ 13 января 2010

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

Таким образом, пока в этом режиме нет оптимизации real , ее можно игнорировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...