源文件(.py)未编译(.pyc未更新)

时间:2015-07-13 05:06:15

标签: python django

我正在尝试更改生产服务器中的某些代码,但是当我测试新代码时,它没有被执行。我认为问题在于,当我上传更新的源文件时,它没有被编译成.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中的更改未被应用的原因是因为它没有被编译?如果是这样,有人可以提供一个如何让它这样做的建议吗?问题可能是我需要重启服务器吗?

3 个答案:

答案 0 :(得分:4)

重置应用程序可能会成功。因为你正在使用gunicorn / nginx我假设你也是supervisord(如果不是这样,请说明,那么我可以更新我的答案也添加)。在这种情况下,您可以sudo suporvisorctl restart <app_name>重新启动应用程序。

可能存在的另一个问题,如brainless coderMarius也说明,应用程序似乎(至少一次)以root运行,您应该避免这种情况。您应该删除.pyc文件并更改运行应用程序的用户。

答案 1 :(得分:2)

.pyc文件由root用户出于某种原因拥有,而不是其他用户可写的。您的Python进程可能以非root身份运行,并且无法创建新的.pyc文件。

删除旧的.pyc文件(首先进行备份),或者将它们与运行.py文件的进程一起chown到同一用户,它可能会起作用。

答案 2 :(得分:1)

如果需要,您可以将其删除,但事实并非如此。我不知道你的代码是如何执行的原因。

.pyc文件是python解释器编译源代码的字节代码,因此只要您有权访问.py文件就可以安全删除。

您是否通过shell运行脚本?在这样做之前,你是否给了文件可执行文件(+ x)​​权限?