Что делать с файлами pyc, когда Django или python используются с Mercurial?
Просто начал использовать Mercurial. Ух, хорошее приложение. Я переместил файл своей базы данных из директории кода, но мне было интересно .pyc
файлы. Я не включил их в первоначальный коммит. Документация о .hgignore
файл содержит пример для исключения *.pyc
Я думаю, что я на правильном пути.
Мне интересно, что произойдет, когда я решу вернуться к старому набору файлов. Нужно ли мне удалить все .pyc
файлы то? Я видел несколько вопросов о переполнении стека по этому вопросу, в том числе один джентльмен, который нашел старый .pyc
файлы были использованы. Каков стандартный способ обойти это?
4 ответа
Как упоминалось в ответе ms4py, *.pyc - это скомпилированные файлы, которые будут восстановлены на лету. Вы не хотели бы включать их при распространении проекта.
Однако, если это происходит, у вас есть модули, которые существовали раньше, когда вы откатываете изменения, и файлы *.pyc остаются без изменений, могут появиться странные ошибки, поскольку файлы pyc могут выполняться, даже если исходный файл python больше не существует. Это укусило меня несколько раз в Django при добавлении и удалении приложений в проекте и переключении веток с помощью git.
Чтобы все исправить, вы можете удалить все скомпилированные файлы в каталоге вашего проекта, выполнив следующую команду оболочки в каталоге вашего проекта:
find . -name '*.pyc' -exec rm {} \;
Обычно вы в безопасности, потому что *.pyc
восстанавливаются, если соответствующие *.py
меняет свой контент.
Это проблематично, если вы удалите *.py
файл, и вы все еще импортируете из него в другой файл. В этом случае вы импортируете из *.pyc
файл, если он существует. Но это будет ошибка в вашем коде и не имеет никакого отношения к вашему рабочему процессу.
Вывод: каждая известная библиотека Python игнорирует их *.pyc
файлы, просто сделай это;)
Чтобы найти более общее решение, спросите у самого Mercurial, какие файлы он игнорирует:
$ hg status --ignored
Вы можете сделать вывод безопасным для xargs
расход:
$ hg status --ignored --no-status -0 | xargs -0 -delete
(The -0
важно обрабатывать файлы с пробелами в имени.) Вы можете установить это как хук после обновления:
[hooks]
post-update = hg status --ignored --no-status -0 | xargs -0 -delete
Наконец, Mercurial поставляется с расширением очистки, которое выполняет нечто подобное:
$ hg purge --all
удалит как неотслеживаемые, так и проигнорированные файлы. Если у вас все в порядке с потерей неотслеживаемых файлов, то эта команда, вероятно, самая простая для вас, в частности, потому что она также работает в Windows, где xargs
может быть трудно найти.
Конечно, если у вас есть .pyc
файл из более старой версии того же модуля Python будет использовать это. Много раз я удивлялся, почему моя программа не отражала сделанные мной изменения, и понимал, что это потому, что у меня были старые файлы pyc.
Если это означает, что .pyc
не отражают вашу текущую версию, тогда да, вам придется удалить все .pyc
файлы.
Если вы используете Linux, вы можете find . -name *.pyc -delete