在Django app中删除Python .pyc文件

时间:2009-11-05 21:20:10

标签: python django django-models

我在python中有以下解决方案结构:

main_app
main_app/template_processor/
main_app/template_processor/models
main_app/template_processor/views

在本地计算机上一切正常。一旦代码到达服务器(它从svn中删除了所有.pyc文件后它就停止了工作),它就不会看到模型中的程序集(如果它可以像python一样被调用)。在syncdb命令期间,除了管理员之外,它不会创建任何表。但在运行时它会找到模型本身,但找不到表(因为它们不是由syncdb创建的)

我已将应用程序添加到settings.py作为已安装的应用程序,一切似乎都没问题。 我现在能看到的唯一区别是,在我的本地机器上我有main_app / template_processor / models / models.pyc文件,但由于某种原因它不会在服务器上预编译(可能是一个提示??)

每个文件夹/子文件夹中都存在

__init__.py个文件。 谁有人遇到这样的问题?

4 个答案:

答案 0 :(得分:1)

听起来Django由于某种原因没有看到该模块(在这种情况下是文件夹)。确保所有文件夹都有一个名为__init__.py的文件(注意前后两个下划线)。完成后,请确保已在已安装的应用中列出。

也许你对它做了一些改变,导致它停止加载。您还可以尝试将.pyc文件从本地计算机上的目录中移出,并在运行服务器时查看它们是否已重新生成。

也许是最有用的东西:./ manage.py shell打开交互式shell然后'import app_name'(不带引号)来查看django是否在查找模块时遇到问题。

答案 1 :(得分:1)

嗯,看看你的目录结构,我认为你需要在template_processor/models/__init__.py中导入所有模型,因为当自动加载模型时(即syncdb),Django只在<app_name>.models模块中查找。 / p>

答案 2 :(得分:1)

我的猜测是你重命名了一个文件,并没有删除oldname.pyc文件。

所以,如果你试着 import oldname

然后你重命名oldname重命名,但不更新你的import语句,代码将在oldname.pyc存在的系统上工作,但是如果oldname.py没有,python将无法重新创建oldname.pyc存在。

尝试

找到。 | grep py | xargs grep import | grep -v django | sort -u

应该为您提供项目中所有导入的列表,看看其中一个导入是否指向您有pyc文件而不是.py文件的模块。

通常,python会快速将.py文件编译为.pyc文件,并且只执行一次。我不担心生成新的.pyc文件所需的时间。

答案 3 :(得分:0)

好的,如果有人对真正发生的事情感兴趣,我有一个故事要告诉你: http://code.djangoproject.com/ticket/4470 这基本上就是我要实现的。 为了真正得到这个东西工作,我仍然应该有一个文件models.py,它将有一个正确的classess列表,其中包含Pass。然后我应该采取所有文件(我的模型)并更改他们的syncdb的meta,以了解他们来自某个“程序集”。

源代码可用(请参阅上面的url)。 thx帮帮忙!