我在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
个文件。
谁有人遇到这样的问题?
答案 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帮帮忙!