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