Достоинства:
Первое: легкое, победное запутывание.
Второе: если в результате компиляции будет значительно меньший файл, вы получите более быстрое время загрузки. Хорошо для сети.
Третье: Python может пропустить этап компиляции. Быстрее при начальной нагрузке. Хорошо для процессора и Интернета.
В-четвертых: чем больше вы комментируете, тем меньше размер файла .pyc
или .pyo
по сравнению с исходным файлом .py
.
Пятое: у конечного пользователя, имеющего только файл .pyc
или .pyo
, гораздо меньше шансов представить вам ошибку, вызванную необратимым изменением, о котором он забыл сообщить.
Шестое: если вы стремитесь к встроенной системе, получите меньший размер
файл для встраивания может представлять значительный плюс, а архитектура стабильна, поэтому недостаток, подробно описанный ниже, не вступает в игру.
Компиляция верхнего уровня
Полезно знать, что вы можете скомпилировать исходный файл Python верхнего уровня в файл .pyc
следующим образом:
python -m py_compile myscript.py
Это удаляет комментарии. Оставляет docstrings
нетронутыми. Если вы хотите избавиться и от docstrings
(возможно, вы захотите серьезно подумать о том, почему вы это делаете), вместо этого скомпилируйте этот способ ...
python -OO -m py_compile myscript.py
... и вы получите файл .pyo
вместо файла .pyc
; одинаково распространяемый с точки зрения основной функциональности кода, но меньший по размеру вычеркнутого docstrings
(и менее понятный для последующего использования, если он имел приличный docstrings
во-первых). Но см. Недостаток три ниже.
Обратите внимание, что python использует дату файла .py
, если он присутствует, чтобы решить, должен ли он выполнять файл .py
в отличие от файла .pyc
или .pyo
- так что отредактируйте ваш .py файл, .pyc
или .pyo
устарели, и все полученные вами преимущества будут потеряны. Вам необходимо перекомпилировать его, чтобы снова получить преимущества .pyc
или .pyo
, какими бы они ни были.
Недостатки:
Во-первых: в файлах .pyc
и .pyo
есть «волшебное печенье», которое указывает на архитектуру системы, в которую был скомпилирован файл python. Если вы распространите один из этих файлов в среде другого типа, он перерыв. Если вы распространяете .pyc
или .pyo
без связанного .py
для перекомпиляции или touch
, чтобы он заменял .pyc
или .pyo
, конечный пользователь не может исправить это либо.
Второе: если docstrings
пропущено с использованием параметра командной строки -OO
, как описано выше, никто не сможет получить эту информацию, что может сделать использование кода более трудным (или невозможным). )
В-третьих: опция Python -OO
также реализует некоторые оптимизации в соответствии с параметром командной строки -O
; это может привести к изменениям в работе. Известные оптимизации:
sys.flags.optimize
= 1
assert
операторы пропускаются
__debug__
= Ложь
В-четвертых: если вы намеренно сделали свой скрипт Python исполняемым с чем-то порядка #!/usr/bin/python
в первой строке, это удаляется в файлах .pyc
и .pyo
и эта функциональность теряется.
Пятое: отчасти очевидно, но если вы скомпилируете свой код, это не только повлияет на его использование, но и уменьшит вероятность того, что другие смогут извлечь пользу из вашей работы, часто очень серьезно.