Django+;Unix Cron,无法导入django.db

Django+;Unix Cron,无法导入django.db,django,cron,Django,Cron,我试图在我的开发笔记本电脑(MacOSX)上通过cron每5分钟运行一次Django脚本。以下是脚本中的代码: import sys import os def setup_environment(): pathname = os.path.dirname(sys.argv[0]) sys.path.append(os.path.abspath(pathname)) sys.path.append(os.path.normpath(os.path.join(os.pat

我试图在我的开发笔记本电脑(MacOSX)上通过cron每5分钟运行一次Django脚本。以下是脚本中的代码:

import sys
import os

def setup_environment():
    pathname = os.path.dirname(sys.argv[0])
    sys.path.append(os.path.abspath(pathname))
    sys.path.append(os.path.normpath(os.path.join(os.path.abspath(pathname), '../')))
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

setup_environment()


from common.models import TweetCache
import datetime

def main():
    print "(%s) Caching tweets..." % str(datetime.datetime.now()) 
    previous_tweets = TweetCache.objects.filter(username='atmospherian')
    for prev in previous_tweets:
        prev.delete()

    import twitter

    api = twitter.Api()
    tweets = api.GetUserTimeline('atmospherian')
    for t in tweets:
        tc = TweetCache(username='atmospherian', date=t.created_at, text=t.text)
        tc.save()

if __name__ == '__main__':
    main()
crontab:

*/5****python/absolute/path/to/tweet_cache.py

来自系统邮件的错误:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=jason>
X-Cron-Env: <USER=jason>
X-Cron-Env: <HOME=/Users/jason>
Date: Tue, 16 Feb 2010 17:45:00 -0500 (EST)

Traceback (most recent call last):
  File "/Users/jason/Development/bandistry/tweet_cache.py", line 22, in <module>
    from common.models import TweetCache
  File "/Users/jason/Development/bandistry/common/models.py", line 1, in <module>
    from django.db import models
ImportError: No module named django.db
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
日期:2010年2月16日星期二17:45:00-0500(美国东部时间)
回溯(最近一次呼叫最后一次):
文件“/Users/jason/Development/bandistry/tweet_cache.py”,第22行,在
从common.models导入TweetCache
文件“/Users/jason/Development/bandistry/common/models.py”,第1行,在
从django.db导入模型
ImportError:没有名为django.db的模块

有人能告诉我我做错了什么吗?

sys.argv[0]
并不总是获取当前文件路径的最可靠方法。我建议进行以下修改:

pathname = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, pathname)
sys.path.insert(0, os.path.abspath(os.path.join(pathname, '..')))
注意使用sys.path.insert代替sys.path.append,以及使用文件。另外,在file-before-
dirname
上使用
abspath
可以减少将整个文件名缩减为空字符串或简单的“.”的可能性,这甚至可能不准确

另外,django包是否安装在您添加的两个路径之一?如果没有,则需要添加该路径

最后,一个小笑话,可能与django导入问题无关,但您确实应该这样做:

os.environ['DJANGO_SETTINGS_MODULE'] = 'bandistry.settings'

它可能不需要,但如果将整个django应用程序放在一个包中,效果会更好。这降低了您隐藏其他软件包名称的可能性。

因此,我的django安装路径应该是:/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site packages/django?这就成功了,我想我错过了django的路径,因为cron似乎创建了自己的环境,您必须独立于系统指定路径。