0

我的目的是能够启动一个 python shell(ipython、bpython 或简单 python)并且:

  1. 自动设置设置.py
  2. 从 INSTALLED_APPS 自动加载模型
  3. 我知道 ./manage.py shell 和 django.extensions,但我想随心所欲地选择运行什么 shell。

为此,我将这段代码(来自http://agiliq.com/blog/2009/12/using-bpython-shell-with-django-and-some-ipython-f/)放在我的 PYTHONSTARTUP 中:

try:
 from django.core.management import setup_environ
 import settings
 setup_environ(settings)
 print 'imported django settings'
 try:
   exec_strs = ["from %s.models import *"%apps for apps in settings.INSTALLED_APPS ]
   for x in exec_strs:
     try:
         exec(x)
     except Exception,e:
         print 'Not imported for %s' %x
         print "Exception:%s" %repr(e)
   print 'imported django models'
 except:
   pass
except:
 pass

这在 bpyton/python 中工作正常。Ipython 忽略了它,所以我自定义了 ipy_user_conf.py 来加载它:

import os

try:
    if os.environ.get("PYTHONSTARTUP",None) is not None:
        execfile(os.environ.get("PYTHONSTARTUP"))
except:
    pass

然而,这失败了,并且似乎永久地破坏了 ipython 的导入,并带有令人费解的诊断:

Not imported for from tick.et.models import *
Exception:ValueError("Unable to configure handler 'mail_admins': __import__() argument 1 must be string, not DictConfigurator",)

谷歌搜索揭示了与 Django 使用日志工具的方式有关的问题,细节超出了我的理解。但请注意,manage.py shell 使用 python 很好,没有上述问题。问题因此变成了,我做错了什么?

之后

在对http://bugs.python.org/issue12718进行了一些挖掘和仔细阅读之后- 看来问题是由 winpdb/rpdb2 的错误(安装在我的盒子上)错误地包装了 python 的内置导入引起的。我想 django 也覆盖了 import,这就是 manage.py 逃脱这个特殊障碍的原因。我仍然很想知道是否存在外部修复(即缺少修补 rpdb2)。

后来还是

我将此问题报告为 winpdb 网站上的错误。没有结束问题,因为可用的理由似乎都不适用。

4

0 回答 0