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