Removing __pycache__ from git repository
You cannot remove files from existing commits: those commits are frozen for all time. You can make sure you do not add new files to future commits, though. Simply remove the files now, with git rm -r —cached __pycache__ , and list __pycache__ or __pycache__/ in your .gitignore (creating this .gitignore file if needed). Do this for each __pycache__ directory; use your OS’s facilities to find these (e.g., find . -name __pycache__ -type d ). Then git add .gitignore and git commit to commit the removal.
Note that any time anyone moves from any commit that has the files—where they’ll be checked out—to a commit that lacks the files, they will have their entire __pycache__ directory removed if Git is able to do that; at the least, any cached files that were committed and can be removed will be removed. So the —cached in the git rm -r —cached above only speeds things up for you by avoiding the removal of the cached compiled files this time. Others will have to rebuild their cache.
To make a new and different repository in which the __pycache__ files were ever accidentally committed in the first place, use git filter-branch (which is now deprecated) or the newfangled git filter-repo (which is not yet distributed with Git). Or, see any of these various existing questions and their answers, which you should already have found before you asked this:
- Remove a file from a Git repository without deleting it from the local filesystem
- Applying .gitignore to committed files
- How can I make Git «forget» about a file that was tracked, but is now in .gitignore?
- Remove sensitive files and their commits from Git history
Удаление файлов pycache из проекта Django
Недавно я попробовал клонировать свой производственный код на другой ПК. Затем я подключил свой проект к пустой БД и выполнил команду python manage.py makemigrations , после чего я увидел, что моя папка migrations была обновлена некоторыми __pycache__ файлами. URL: /folder/app/migrations/pycache Я знаю, что файлы миграций очень важны, но здесь проблема в том, что производственная БД содержит данные, а БД на другом ПК пуста. Я думаю, что если я перенесу эти __pycache__ файлы в продакшн, это может привести к конфликту.
Моя идея заключается в том, чтобы не выталкивать эти файлы pycache (/folder/app/migrations/pycache) в мою производственную среду и игнорировать их с помощью gitignore (поскольку я использую git для контроля версий).
Правильно ли я поступаю?
и должен ли я gitignore все __pycache__ файлы из проекта.
Добавьте следующую строку в ваш .gitignore файл, чтобы избежать байт-компиляции файла в Python
**/__pycache__ *.pyc
Пожалуйста, убедитесь, что ваши папки еще не отслеживаются.
добавьте __pycache__/ в ваш файл .gitignore
Я сталкивался с подобными проблемами, и это прекрасно сработало.
вы можете добавить .pytest_cache/ .mypy_cache/ также в ваш файл .gitignore в случае, если вы не хотите продвигать эти типы других файлов кэша для дальнейшего развития
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Убрать каталоги venv, .idea, __pycache__ из репозитория #4
Что такое __pycache__ в Python? Как запретить создание __pycache__ и .pyc файлов?

В этой статье будет разобрана природа возникновения папки __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 файл, но по какой-то причине вы все еще видите, как они выполняются любым возможным способом, то это может быть фактической причиной.