Из того, что я понимаю, кеш - это зашифрованный файл похожих файлов.
Что мы делаем с папкой __pycache__
? Это то, что мы даем людям вместо нашего исходного кода? Это только мои входные данные? Эта папка продолжает создаваться, для чего она?
Из того, что я понимаю, кеш - это зашифрованный файл похожих файлов.
Что мы делаем с папкой __pycache__
? Это то, что мы даем людям вместо нашего исходного кода? Это только мои входные данные? Эта папка продолжает создаваться, для чего она?
Когда вы запускаете программу на python, интерпретатор сначала компилирует ее в байт-код (это упрощение) и сохраняет ее в папке __pycache__
. Если вы посмотрите там, вы найдете кучу файлов, которые будут совместно использовать имена файлов .py в папке проекта, только их расширения будут либо .pyc, либо .pyo. Это файлы, скомпилированные байт-кодами и оптимизированные с помощью байт-кода ваши файлы программ, соответственно.
Как программист, вы можете просто игнорировать его... Все, что он делает, это сделать вашу программу немного быстрее. Когда ваши скрипты меняются, они будут перекомпилированы, и если вы удалите файлы или всю папку и снова запустите свою программу, они снова появятся (если вы специально не подавите это поведение)
Если вы используете cpython (который является наиболее распространенным, так как он является эталонной реализацией), и вам не нужна эта папка, вы можете его подавить, запустив интерпретатор с помощью флага -B, например
python -B foo.py
Другим вариантом, как указано tcaswell, является установка переменной окружения PYTHONDONTWRITEBYTECODE
на любое значение (согласно странице руководства 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
или попробуйте получить информацию из другого файла, который вы создали. Это делает его немного быстрее при запуске программы во второй раз, чтобы открыть другой файл.
__pycache__
- это каталог, содержащий файлы кеша байт-кода, которые автоматически создаются python, а именно скомпилированные файлы python или .pyc
. Вы можете быть удивлены, почему Python, "интерпретируемый" язык, вообще имеет какие-либо скомпилированные файлы. Этот ТАК вопрос решает это (и это определенно стоит прочитать этот ответ).
Документы по Python более подробно рассказывают о том, как именно он работает и почему он существует:
.pyc
в одном и том же каталоге вызывала различные проблемы, например, когда программа запускалась с интерпретаторами Python разных версий. Для полной спецификации функции см. PEP 3174.из официального учебного модуля Python
Чтобы ускорить загрузку модулей, Python кэширует скомпилированную версию каждого модуля в каталоге
__pycache__
под именемmodule.version.pyc
, где версия кодирует формат скомпилированного файла; обычно он содержит номер версии Python. Например, в версии 3.6 CPython скомпилированная версия spam.py будет кэшироваться как__pycache__/spam.cpython-36.pyc
.
из часто задаваемых вопросов по программированию на Python doc
Когда модуль импортируется впервые (или когда исходный файл изменился с момента создания текущего скомпилированного файла), файл .pyc, содержащий скомпилированный код, должен быть создан в подкаталоге
__pycache__
каталога, содержащего файл.py
. Файл.pyc
будет иметь имя файла, которое начинается с того же имени, что и файл.py
, и заканчивается.pyc
, со средним компонентом, который зависит от конкретного двоичного файла python, который его создал.
Интерпретатор python компилирует файл сценария *.py и сохраняет результаты компиляции в каталог __pycache__
.
Когда проект выполняется снова, если интерпретатор обнаруживает, что сценарий *.py не был изменен, он пропускает этап компиляции и запускает ранее созданный файл *.pyc, хранящийся в папке __pycache__
.
Когда проект сложный, вы можете сократить время подготовки до запуска проекта. Если программа слишком мала, вы можете проигнорировать это, используя python -B abc.py
с опцией B
В 3.2 и более поздних версиях Python сохраняет файлы скомпилированного байтового кода .pyc в подкаталоге с именем __pycache__
расположенном в каталоге, где находятся исходные файлы с именами файлов, которые идентифицируют версию Python, которая их создала (например, script.cpython-33.pyc).
Выполнение скрипта Python приведет к тому, что байт-код будет сгенерирован в памяти и сохранен до завершения работы программы. В случае импорта модуля для более быстрого повторного использования Python создаст файл .pyc для кеша (PYC - это "Python" "Compiled"), в котором кэшируется байтовый код импортируемого модуля. Идея состоит в том, чтобы ускорить загрузку модулей Python, избегая повторной компиляции (компилировать один раз, запускать многократную политику) при их повторном импорте.
Имя файла совпадает с именем модуля. Часть после начальной точки указывает на реализацию Python, которая создала кэш (может быть CPython), за которым следует его номер версии.
pycache= Байт-код скомпилированных файлов python
Интерпретатор Python компилирует ваш код в эти кэшированные файлы и сохраняет их в эти папки в любое время, когда вы будете использовать
import something
оно появится