2016-06-07 2 views
2

pyc файлы были причиной скорби в прошлом, и я недавно видел несколько сообщений о предотвращении их создания python. В настоящее время мы просто запускаем скрипт для их очистки после любых изменений кода, чтобы обеспечить получение свежих, но было бы намного проще просто отключить их в целом. Есть ли какие-либо побочные эффекты для их отключения в нашей производственной среде, возможно, я не знаю? Каковы недостатки этого?Отключение файлов pyc в процессе производства

Единственная реальная проблема, с которой мы сталкиваемся, - иногда файлы устаревают, вызывая ошибки импорта, и их трудно отлаживать после массивного рефакторинга. Поняв, что это проблема pyc, это достаточно простое исправление, просто запустите скрипт, но эта реализация может наступить 30 минут по пути отладки.

+0

Можете ли вы описать проблемы, с которыми вы сталкиваетесь с ними более подробно? Там может быть лучший вариант, который просто отключает их. – skrrgwasme

+0

Возможный дубликат [Как избежать .pyc-файлов?] (Http: // stackoverflow.com/questions/154443/how-to-avoid-pyc-files) –

ответ

2

Отключение записи и использования скомпилированного байт-кода при загрузке сопровождается затратами на производительность - ваш код Python загружается в память при возникновении процесса, а не-.pyc/.pyo-файлы означает, что интерпретатор вынужден анализировать каждый импортированный файл при запуске. Если вы в настоящее время удаляете все файлы .pyc и .pyo из каталога кода и импорта, вы уже форсируете эту версию.

Я интересно, где они огорчили в прошлом (вы отключив измененные разы в файловой системе?), Как если файл .py новее, чем .pyc файла, интерпретатор Python (по крайней мере, в общем реализации, включая CPython), будет перекомпилировать источник, но это не очень важно для области этого вопроса.

Если вы импортируете за функции, например .:

def my_database_call(budget_id): 
    import some_expensive_module_to_import 
    some_orm(...).get(budget_id) 

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

В случае, если вы раскрыли комментарии, если вы «обстреливаете» ОС для вызова сценария Python и не разрешаете байт-код записываться в этом вызове, каждый вызов несет цену компиляции.

+0

Иногда они не перекомпилируются после проверки нового кода с Git. Иногда это может быть серьезная отладка головной боли, что файлы 'pyc' - вот что вызывает эти ошибки импорта. Особенно после массивных рефакторов. – electrometro

+0

А, ладно, я вижу, что это происходит. Основное изменение, если вы не разрешаете писать файлы байт-кода, будет увеличено время запуска. Это может быть очень важно, если ваше приложение создает исключение в процессе производства, и вы полагаетесь на него для перезапуска. –

+0

Как это повлияет на использование 'popen' для запуска скрипта python? Мы делаем это очень часто. – electrometro

2

Вы можете попробовать добавить следующий код к своему основному. Любой модуль импортирован после не будет создавать .pyc:

import sys 
sys.dont_write_bytecode=True 

или установка переменной Enviroment:

PYTHONDONTWRITEBYTECODE 

Вы можете также редактировать или создавать свои usercustomize.py найти в /site-packages содержать:

import sys 
sys.dont_write_bytecode=True 

Также можно передать опцию . Что касается удаления или отключения генерации .pyc, последствия кажутся маленькими или неотличимыми. Для повышения скорости создается .pyc. Не скорость программы, а количество времени, которое требуется для загрузки. Если вы постоянно используете importing, тогда рекомендуется использовать .pyc, поскольку он уменьшает время загрузки указанных модулей. При исследовании, похоже, нет никакой другой пользы от использования/генерации .pyc.

+0

Я знаком с тем, как отключить их, но я ищу, каковы потенциальные побочные эффекты этого. – electrometro

+0

@electrometro Обновлено. – TheLazyScripter

Смежные вопросы