4

我在appengine上正确导入模块时遇到问题。我的应用程序通常将django与app-engine-patch一起使用,但这部分是仅使用webapp框架的任务队列。Sys.path修改或更复杂的问题?

我需要导入应用程序的Django设置才能正常工作。

我的脚本开始:

import os 
import sys 
sys.path.append('common/') 
# Force Django to reload its settings. 
from django.conf import settings 
settings._target = None 

# Must set this env var before importing any part of Django 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

我总是得到这个错误,或者相关的东西:

<type 'exceptions.ImportError'>: No module named ragendja.settings_pre 

因为settings.py文件与

from ragendja.settings_pre import * 

我想开始我需要再次将ragendja添加到sys.path,但我有几次尝试失败。

这里是我的目录:

project/ 
    app.yaml 
    setting.py 
    common/ 
     appenginepatch/ 
      ragendja/ 
       setting_pre.py 
    myapp/ 
     script.py 

难道只有一个sys.path的问题,我怎么需要用正确的语法进行修改?

谢谢

回答

3

应用程序引擎修补程序在内部操纵sys.path。后台任务绕过该代码,因此您的路径将无法准备好用于Django调用。您有两种选择:

  • 手动修复路径。 app engine documentation(请参阅“处理导入路径操作”子节)建议将路径操作代码分解为可由任务脚本导入的模块。

  • 如果可能的话,消除对django代码的依赖关系。如果你可以将你的任务编写成纯python和/或谷歌API调用,那么你很好。在你的情况下,这可能意味着重构你的设置代码。

+0

我需要一些django模型,所以我不能消除django代码。 我读了第一点和谷歌文档,但它并没有真正的帮助。你能告诉我更多吗? – user375348 2010-08-30 20:36:51

0

为什么不:

sys.path.append('common/appenginepatch') 

因为ragendja此目录中?

+0

我试过了,但它不起作用。我不知道为什么 – user375348 2010-08-30 16:32:08