【问题标题】:Sys.path modification or more complex issue?Sys.path 修改或更复杂的问题?
【发布时间】:2011-04-05 16:34:42
【问题描述】:

我在 appengine 上正确导入模块时遇到问题。我的应用一般使用django和app-engine-patch,但这部分是只使用webapp框架的任务队列。

我需要导入 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 问题,我需要如何使用正确的语法对其进行修改?

谢谢

【问题讨论】:

    标签: python django google-app-engine app-engine-patch django-settings


    【解决方案1】:

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

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

    • 尽可能消除对 django 代码的依赖。如果您可以将任务编写为纯 python 和/或 google api 调用,那么您就可以开始了。在您的情况下,这可能意味着重构您的设置代码。

    【讨论】:

    • 我需要一些 django 模型,所以我无法消除 django 代码。我阅读了第一点和谷歌文档,但它并没有真正帮助。你能告诉我更多吗?
    【解决方案2】:

    为什么不:

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

    因为 ragenja 在这个目录中?

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 2015-06-11
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多