В этой статье будет разобрана природа возникновения папки __pycache__, которая создается при запуске кода Python.
Введение
Наверное, вы заметили, что при выполнении кода Python __pycache__
(иногда) создается каталог с именем, который содержит множество файлов с .pyc
расширением.
В этой статье мы обсудим назначение этих файлов, которые создаются интерпретатором Python. Мы обсудим, почему эти файлы генерируются, как подавить их создание и как гарантировать, что они не будут переданы в какой-либо удаленный репозиторий.
Файлы .pyc и папка __pycache__
Python является интерпретируемым языком, что означает, что ваш исходный код преобразуется в набор инструкций, понятных ЦП во время выполнения. При запуске вашей программы Python исходный код компилируется в байт-код, который является деталью реализации CPython (исходной реализации Python). Байт-код также кэшируется и сохраняется в .pyc файлах
, поэтому при следующем повторном запуске кода выполнение того же файла будет быстрее.
Обратите внимание, что пара концепций, обсуждаемых в этом разделе, касающихся интерпретатора и байт-кода, упрощены и верны лишь частично, но их более чем достаточно, чтобы помочь вам понять pyc файлы и __pycache__
директории.
Таким образом, после первого выполнения вашего исходного кода будет создана папка __pycache__, содержащая несколько .pyc файлов байт-кода с теми же именами, что и ваши .py файлы. Как уже упоминалось, они будут использоваться в последующих исполнениях, чтобы ваша программа запускалась немного быстрее.
Каждый раз, когда ваш исходный код модифицируется, он будет перекомпилирован, и новые файлы байт-кода будут создаваться снова. Обратите внимание, что в некоторых случаях это может быть не так, и Python выполнит код, используя кэшированные файлы, что вызовет у вас некоторые проблемы. Например, вы, возможно, исправили ошибку, но Python может работать в кешированной версии с ошибками. В этом случае вам, возможно, придется удалить __pycache__ папку или даже запретить создание этих файлов.
Подавление/запрет создания __pycache__
При использовании интерпретатора CPython (который в любом случае является исходной реализацией Python) вы можете подавить создание этой папки двумя способами.
Первый вариант — передать -B
флаг при запуске файла Python. Когда флаг указан, Python не будет пытаться записывать .pyc файлы
при импорте исходных модулей:
python3 -B my_python_app.py
В качестве альтернативы вы можете установить переменную среды PYTHONDONTWRITEBYTECODE в любую непустую строку. Опять же, это предотвратит попытки Python записывать .pyc
файлы.
export PYTHONDONTWRITEBYTECODE=abc
Обратите внимание, что оба подхода эквивалентны.
Добавление __pycache__ в файл .gitignore
При работе в локальном репозитории Git будет отслеживать каждый файл в репозитории Git. Каждый файл может быть отслежен (т.е. уже подготовлен и зафиксирован), не отслежен (не подготовлен или зафиксирован) или проигнорирован.
В большинстве случаев вам следует игнорировать определенные файлы, такие как файлы с конфиденциальными данными, системные файлы или автоматически сгенерированные файлы, созданные, скажем, в среде IDE или в определенной рабочей области.
Самый элегантный способ сделать это — через .gitignore файл, который находится в верхнем каталоге удаленного репозитория Git, в котором вы можете явно указать файлы или каталоги (также можно применять регулярные выражения), которые Git будет игнорировать и не будет отслеживать дольше.
__pycache__ входит в число каталогов, которые не следует помещать в удаленные репозитории. Поэтому все, что вам нужно сделать, это указать каталог в .gitignore файле.
# .gitignore __pycache__/
Важное
Одно важное предостережение относительно байт-кода заключается в том, что .pyc файлы будут использоваться в тех случаях, когда эквивалентного .py файла больше нет. Например, если вы удалили или переименовали .py файл, но по какой-то причине вы все еще видите, как они выполняются любым возможным способом, то это может быть фактической причиной.
Leave a Reply