Из того, что я понимаю, кеш - это зашифрованный файл похожих файлов.
Что мы делаем с __pycache__
папкой? Это то, что мы даем людям вместо нашего исходного кода? Это только мои входные данные? Эта папка продолжает создаваться, для чего она?
python
python-3.x
caching
user2063042
источник
источник
Python 3.8
вы можете использовать переменную среды, чтобы изменить расположение раздражающих каталогов кеша: stackoverflow.com/a/57414308/1612318Ответы:
Когда вы запускаете программу на python, интерпретатор сначала компилирует ее в байт-код (это упрощение) и сохраняет ее в
__pycache__
папке. Если вы заглянете туда, то найдете папку с общими именами файлов .py в папке вашего проекта, только их расширения будут .pyc или .pyo. Это скомпилированные с помощью байт-кода и оптимизированные скомпилированные с помощью байт-кода версии файлов вашей программы, соответственно.Как программист, вы можете просто игнорировать это ... Все, что он делает, это заставляет вашу программу запускаться немного быстрее. Когда ваши сценарии изменятся, они будут перекомпилированы, и если вы удалите файлы или всю папку и снова запустите свою программу, они появятся снова (если вы специально не подавите такое поведение)
Если вы используете cpython (который является наиболее распространенным, поскольку он является эталонной реализацией) и вам не нужна эта папка, то вы можете отключить ее, запустив интерпретатор, например, с флагом -B
Другой вариант, как отметил tcaswell, - установить для переменной среды
PYTHONDONTWRITEBYTECODE
любое значение (в соответствии с man-страницей python любая «непустая строка»).источник
PYTHONDONTWRITEBYTECODE=<any_value>
чтобы постоянно ее подавлять.python2
помещает скомпилированные файлы в тот же каталог, что и оригиналы, если я не ошибаюсь.find . -name '*.pyc' -delete
Да, команда find имеет флаг для удаления найденных файлов, поэтому вам не нужно использовать xargs shananigans__pycache__
это папка, содержащая байт-код Python 3, скомпилированная и готовая к выполнению .Я не рекомендую регулярно удалять эти файлы или подавлять создание во время разработки, поскольку это может снизить производительность. Просто подготовьте рекурсивную команду (см. Ниже) для очистки при необходимости, поскольку байт-код может устареть в крайних случаях (см. Комментарии).
Программисты Python обычно игнорируют байт-код. Действительно,
__pycache__
и*.pyc
это общие строки, чтобы увидеть в.gitignore
файлах. Байт-код не предназначен для распространения и может быть разобран с помощьюdis
модуля .Если вы используете OS X, вы можете легко скрыть все эти папки в вашем проекте, выполнив следующую команду из корневой папки вашего проекта.
Заменить
__pycache__
на*.pyc
для Python 2.Это устанавливает флаг для всех этих каталогов (файлов .pyc), сообщая Finder / Textmate 2 об их исключении из списков. Важно, что байт-код есть, он просто скрыт.
Повторите команду, если вы создаете новые модули и хотите скрыть новый байт-код или если вы удалили скрытые файлы байт-кода.
В Windows эквивалентная команда может быть (не проверена, приветствуется пакетный скрипт):
Это то же самое, что проходить через проект, скрывая папки, используя правый клик> скрыть ...
Запуск юнит-тестов - это один из сценариев (больше в комментариях), где удаление
*.pyc
файлов и__pycache__
папок действительно полезно. Я использую следующие строки в моем~/.bash_profile
и просто запускаюcl
для очистки, когда это необходимо.источник
__pycache__
Папка создается , когда вы используете линию:или попробуйте получить информацию из другого файла, который вы создали. Это немного ускоряет запуск вашей программы во второй раз, чтобы открыть другой файл.
источник
Обновленный ответ из 3.7+ документов:
Источник: https://docs.python.org/3/tutorial/modules.html#compiled-python-files
То есть этот каталог создан Python и существует для того, чтобы ваши программы работали быстрее. Он не должен быть связан с управлением исходным кодом и должен сосуществовать в мире с вашим локальным исходным кодом.
__pycache__
каталог, содержащий файлы кэша байт-кода, которые автоматически генерируются python, а именно скомпилированный python или.pyc
файлы. Вы можете быть удивлены, почему Python, «интерпретируемый» язык, вообще имеет какие-либо скомпилированные файлы. Этот SO вопрос решает эту проблему (и этот ответ определенно стоит прочитать ).Документы по Python более подробно рассказывают о том, как именно он работает и почему он существует:
.pyc
файлов в одном каталоге вызывала различные проблемы, например, когда программа запускалась с интерпретаторами Python разных версий. Для полной спецификации функции см. PEP 3174 .источник
из официального учебного модуля Python
из часто задаваемых вопросов по программированию на Python doc
источник
Выполнение скрипта Python приведет к тому, что байт-код будет сгенерирован в памяти и сохранен до завершения работы программы. В случае импорта модуля для более быстрого повторного использования Python создаст файл .pyc для кеша (PYC - это «Python» «Compiled»), в котором кэшируется байтовый код импортируемого модуля. Идея состоит в том, чтобы ускорить загрузку модулей Python, избегая повторной компиляции (компилировать один раз, выполнять несколько раз политику), когда они реимпортируются.
Имя файла совпадает с именем модуля. Часть после начальной точки указывает на реализацию Python, которая создала кэш (может быть CPython), за которым следует его номер версии.
источник
Интерпретатор python компилирует файл сценария * .py и сохраняет результаты компиляции в
__pycache__
каталоге.Когда проект выполняется снова, если интерпретатор обнаруживает, что сценарий * .py не был изменен, он пропускает этап компиляции и запускает ранее созданный файл * .pyc, хранящийся в
__pycache__
папке.Если проект сложный, вы можете сократить время подготовки до его запуска. Если программа слишком мала, вы можете игнорировать , что при использовании
python -B abc.py
сB
опцией.источник
Python версии 2.x будет иметь .pyc, когда интерпретатор компилирует код.
Python версии 3.x будет иметь __pycache__, когда интерпретатор компилирует код.
источник
В 3.2 и более поздних версиях Python сохраняет файлы скомпилированного байтового кода .pyc в подкаталоге с именем,
__pycache__
расположенном в каталоге, где находятся исходные файлы с именами файлов, которые идентифицируют версию Python, которая их создала (например, script.cpython-33.pyc).источник
Когда вы импортируете модуль ,
Python сохраняет скомпилированный байт-код в
__pycache__
каталоге, чтобы будущие импортеры могли использовать его напрямую, вместо того, чтобы снова анализировать и компилировать исходный код.Это не делается для простого запуска скрипта, только когда файл импортирован.
(Предыдущие версии использовались для хранения кэшированного байт-кода в виде файлов .pyc, которые засоряли тот же каталог, что и файлы .py, но начиная с Python 3 они были перемещены в подкаталог, чтобы сделать все более аккуратным.)
PYTHONDONTWRITEBYTECODE ---> Если для этого параметра задана непустая строка, Python не будет пытаться записывать файлы .pyc при импорте исходных модулей. Это эквивалентно указанию опции -B.
источник