私の目的は、Python シェル (ipython、bpython、または単純な python) を起動できるようにすることです。
- autosetup settings.py
- INSTALLED_APPS からモデルを自動ロードします
- ./manage.py シェルと django.extensions は知っていますが、気まぐれに実行するシェルを選択したいと思います。
この目的のために、私は PYTHONSTARTUP にこのコードを貼り付けました ( http://agiliq.com/blog/2009/12/using-bpython-shell-with-django-and-some-ipython-f/から):
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 シェルは、上記の問題なしで python を問題なく使用することに注意してください。したがって、問題は、私が間違っていることは何ですか?
後で
http://bugs.python.org/issue12718を掘り下げて注意深く読んだ後、問題は winpdb/rpdb2 (私のボックスにインストールされている) のバグが原因で、Python の組み込みインポートが正しくラップされていないようです。django も import をオーバーライドすると思います。それが、manage.py がこの特定の問題を回避する理由です。外部の修正プログラムが存在するかどうかを知りたいと思っています (つまり、rpdb2 にパッチを適用する以外に)。
後でまだ
winpdb のサイトでこの問題をバグとして報告しました。利用可能な理由がどれも当てはまらないため、質問を閉じません。