2015-07-13 2 views
2

Я пытаюсь изменить код на рабочем сервере, но когда я тестирую новый код, он не выполняется. Я думаю, проблема заключается в том, что когда я загружаю обновленный исходный файл, он не компилируется в файл .pyc.Исходный файл (.py) не компилируется (.pyc не обновляется)

-rw-r--r-- 1 ubuntu ubuntu 47872 Jul 13 04:39 admin_email.py 
-rw-r--r-- 1 root root 48212 Feb 10 03:12 admin_email.pyc 

Как видно из приведенных выше меток времени, файл .pyc не был обновлен.

Правильно ли я предполагаю, что изменения в admin_email.py не применяются, потому что они не компилируются? Если да, может ли кто-нибудь предложить предложение о том, как это сделать? Может ли проблема состоять в том, что мне нужно перезагрузить сервер?

+0

Когда создаются файлы .pyc? См. Http://stackoverflow.com/a/15839646/4663466 – Scott

+0

Итак, похоже, что решение заключается в удалении скомпилированного файла, и это должно инициировать создание новой скомпилированной версии. верный? – evanill80

+0

Перезагрузите приложение после загрузки нового файла? – jgadelange

ответ

4

Сброс приложения, вероятно, делает трюк. Поскольку вы используете gunicorn/nginx, я предполагаю, что вы также являетесь руководителем (если это не так, скажите об этом, тогда я могу обновить свой ответ, чтобы добавить это). В этом случае вы можете сделать sudo suporvisorctl restart <app_name>, чтобы перезапустить приложение.

Другой вопрос, который может быть там, как brainless coder и Marius также заявил, что, кажется, приложение было (хотя бы раз) запущено как root, вам следует избегать этого. Вы должны удалить файлы .pyc и изменить пользователя, в котором работает приложение.

+0

Я не уверен, что был использован супервизор.Я не создавал приложение, я обновляю существующее приложение, а Im все еще немного зеленое с Django. Может быть, проще всего сделать резервную копию admin_email.pyc, удалить его, а затем проверить приложение, чтобы узнать, генерирует ли он скомпилированный файл и правильно выполняет. – evanill80

+0

Перезапуск 'gunicorn' успешно перекомпилирует' admin_email.py' и обновляет поведение приложений. Вам нужно выполнить команду для перезапуска 'gunicorn' в том же каталоге, в котором находится сценарий django' manage.py'. – evanill80

1

Вы можете удалить его, если необходимо, но это действительно так. Я не понимаю, почему именно ваш код не выполняется.

.pyc-файлы - это байтовые коды, которые интерпретатор python компилирует исходный код, при условии, что у вас есть доступ к файлу .py, который вы можете удалить.

Вы используете скрипт через оболочку? Предоставляли ли вы разрешение на выполнение файла (+ x) до этого?

2

Файл .pyc по какой-то причине принадлежит пользователю root и не может быть записан другими пользователями. Возможно, ваш процесс Python работает как не-root и не может создавать новые .pyc-файлы.

Либо удалите старые .pyc-файлы (сначала сделайте резервную копию), либо отдайте их тому же пользователю, что и процесс, который запускает .py-файлы, и он, вероятно, будет работать.

Смежные вопросы