Насколько я понимаю, кэш - это зашифрованный файл похожих файлов.
Что мы делаем с папкой __pycache__
? Это то, что мы отдаем людям вместо нашего исходного кода? Это просто мои исходные данные? Эта папка постоянно создается, для чего она нужна?
Когда вы запускаете программу на python, интерпретатор сначала компилирует ее в байткод (это упрощение) и сохраняет его в папке __pycache__
. Если вы заглянете туда, то найдете кучу файлов с именами .py в папке вашего проекта, только их расширения будут .pyc или .pyo. Это скомпилированные байткодом и оптимизированные байткодом версии файлов вашей программы соответственно.
Как программист, вы можете в основном просто игнорировать это... Все, что он делает, это заставляет вашу программу запускаться немного быстрее. Когда ваши скрипты изменятся, они будут перекомпилированы, и если вы удалите файлы или всю папку и запустите программу снова, они появятся снова (если вы специально не запретите такое поведение).
Если вы используете cpython (что наиболее распространено, так как это эталонная реализация) и вам не нужна эта папка, то вы можете подавить ее, запустив интерпретатор с флагом -B, например
python -B foo.py
Другой вариант, как отметил tcaswell, это установить переменную окружения PYTHONDONTWRITEBYTECODE
в любое значение (согласно man-странице python'а, любая "непустая строка").
__pycache__
- это папка, содержащая Python 3 байткод, скомпилированный и готовый к выполнению.
Я не рекомендую регулярно удалять эти файлы или подавлять их создание во время разработки, так как это может снизить производительность. Просто имейте наготове рекурсивную команду (см. ниже) для очистки при необходимости, поскольку байткод может устаревать в нестандартных случаях (см. комментарии).
Программисты Python обычно игнорируют байткод. Действительно, __pycache__
и *.pyc
- обычные строки, которые можно увидеть в файлах .gitignore
. Байткод не предназначен для распространения и может быть дизассемблирован с помощью модуля dis
.
Если вы используете OS X, вы можете легко скрыть все эти папки в вашем проекте, выполнив следующую команду из корневой папки вашего проекта.
find . -name '__pycache__' -exec chflags hidden {} \;
Замените __pycache__
на *.pyc
для Python 2.
Это установит флаг для всех этих каталогов (.pyc-файлов), говорящий Finder/Textmate 2 исключить их из листинга. Важно, что байткод находится там, он просто скрыт.
Повторите команду, если вы создаете новые модули и хотите скрыть новый байткод, или если вы удалите скрытые файлы байткода.
В Windows эквивалентной командой может быть (не проверено, пакетный скрипт приветствуется):
dir * /s/b | findstr __pycache__ | attrib +h +s +r
Что аналогично переходу по папкам скрытия проекта с помощью правой кнопки мыши > скрыть...
Запуск модульных тестов - один из сценариев (подробнее в комментариях), где удаление файлов *.pyc
и папок __pycache__
действительно полезно. Я использую следующие строки в моем ~/.bash_profile
и просто запускаю cl
для очистки, когда это необходимо.
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
Папка pycacheсоздается при использовании линии
import file_name
или попытаться получить информацию из другого файла, который вы создали. Это делает его немного быстрее при запуске программы второй раз, чтобы открыть другой файл.
Обновлен ответ с 3,7+ документы:
для ускорения погрузочных модулей, в Python кэширует скомпилированный вариант каждый модуль в директорию
__pycache__
под названиеммодуль.версия.пыць, где версия кодирует формат скомпилированный файл; как правило, содержит питона номер версии. Для например, с CPython в версии 3.3 скомпилированную версию spam.py будет быть кэширован как__pycache__/спам.с CPython-33.пыць
. Это соглашение об именовании позволяет скомпилированные модули из разных выпусков и разных версий в Python, чтобы сосуществовать.
Источник: https://docs.python.org/3/tutorial/modules.html#compiled-python-files
То есть, этот каталог создается с помощью Python и существует для того, чтобы сделать ваши программы работают быстрее. Он должен'т быть совершены в систему управления версиями, и должны сосуществовать в мире с местными исходный код.
__pycache__ - это каталог, который содержит байт-код, кэш-файлы, которые автоматически создаются на Python, а именно скомпилированные Python или
.пыць, файлов. Вы можете быть удивлены, почему Python, собой "трактовать" по язык, любые скомпилированные файлы на всех. Это так Вопрос - адресов, которые (и это'ы наверняка стоит почитать этот ответ).
Питон документы вдаваться в более подробно о том, как это работает и почему оно существует:
на официальном языке Python учебник модули
, Чтобы ускорить модули загрузки, в Python кэширует скомпилированные версии каждого модуля в директории
__pycache__ по модулю имя.версия.пыць, где версия кодирует формат скомпилированный файл, он как правило содержит номер версии питона. Например, в с CPython версии 3.6 скомпилированную версию spam.py будет кэшироваться как
pycache/спам.с CPython-36.пыць`.
из кожи питона док Программирование FAQs
когда модуль импортируется первый раз (или если исходный файл был изменен с текущего скомпилированный файл был создал).файл pyc, содержащий скомпилированный код должен быть создан в подкаталогеpycache
в каталог, содержащий
.файл py. Этот
.файл pycбудет иметь имя файла, которое начинается с таким же именем, как
.файл pyи заканчивается
.пыць, с середины компонент, который зависит от конкретного бинарные Python, который его создал.
Выполнение скрипта Python может привести к байт-код, который будет сгенерирован в памяти и держал до тех пор, пока программа завершается. В случае, когда модуль импортируется, для быстрого повторного использования, Python может создать кэш .ЧКД (ЧКД это 'питон' 'составлена' файл), где байт-код модуля импортируются кэшируется. Идея для ускорения загрузки модулей Python, избегая повторной компиляции ( компиляции один раз, многократное выполнение политики ), когда они будут импортироваться.
Имя файла совпадает с именем модуля. После первоначального точка обозначает реализации Python, который создал кэш (может быть с CPython), а затем номер версии.
Интерпретатор Python компилирует *.файл скрипта ру и сохраняет результаты компиляции в директории __pycache__
.
Когда проект выполняется снова, если переводчик указывает, что .сценарий пы не был изменен, он пропускает этап компиляции и запуске ранее созданного .файл pyc хранятся в папкеpycache`.
Когда проект сложный, вы можете сделать время подготовки до реализации проекта запускается короче. Если программа слишком мала, вы можете игнорировать это с помощью языка Python -Б abc.pyс параметром
Б`.
В версии 3.2 и более поздних Python сохраняет файлы скомпилированного байт-кода .pyc в подкаталоге __pycache__
, расположенном в каталоге, где находятся ваши исходные файлы, с именами файлов, идентифицирующими версию Python, которая их создала (например, script.cpython-33.pyc).