当我通过键入python manage.py shell
启动django shell时
ipython shell已启动。是否有可能让Django以qtconsole模式启动ipython? (即让它运行ipython qtconsole
)
Arek
编辑: 所以我正在尝试Andrew Wilkinson在他的回答中提出的建议 - 使用基于原始django shell命令的命令扩展我的django应用程序。据我所知,在原始版本中启动ipython的代码是:
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
requires_model_validation = False
def handle_noargs(self, **options):
from IPython.frontend.terminal.embed import TerminalInteractiveShell
shell = TerminalInteractiveShell()
shell.mainloop()
如何更改此代码以在qtconsole模式下启动ipython的任何建议?
第二次编辑: 到目前为止我发现和工作的是 - 从我的项目的settings.py所在的位置开始'ipython qtconsole'(或者如果从不同的位置开始设置sys.path),然后执行:
import settings
import django.core.management
django.core.management.setup_environ(settings)
现在我可以导入我的模型,列出所有实例等。
答案 0 :(得分:7)
文档here说:
如果你不想使用manage.py,没问题。只需设置 DJANGO_SETTINGS_MODULE环境变量到mysite.settings并运行 来自同一目录manage.py的python(或确保 目录在Python路径上,因此导入mysite有效。)
因此,设置该环境变量然后运行ipython qtconsole
就足够了。您可以制作一个简单的脚本来自动为您执行此操作。
答案 1 :(得分:4)
我使用以下内容创建了一个shell脚本:
/path/to/ipython
qtconsole --pylab inline -c "run /path/to/my/site/shell.py"
如果你想要酷的内联matplotlib图,你只需要--pylab inline
部分。
我在shell.py
创建了一个python脚本/path/to/my/site
,其中包含:
import os
working_dir = os.path.dirname(__file__)
os.chdir(working_dir)
import settings
import django.core.management
django.core.management.setup_environ(settings)
运行我的shell脚本会获得一个ipython qtconsole,它具有django shell的优点。
答案 2 :(得分:2)
您可以检查运行shell here的代码。您将看到没有配置shell运行的位置。
您可以做的是复制此文件,将其重命名为shell_qt.py并将其放在您自己项目的管理/命令目录中。更改它以运行QT控制台,然后您可以运行manage.py shell_qt
。
答案 3 :(得分:1)
自Django 1.4版以来,不推荐使用django.core.management.setup_environ()
。适用于IPython笔记本和QTconsole的解决方案是这样的(只需在Django项目目录中执行):
In [1]: from django.conf import settings
In [2]: from mydjangoproject.settings import DATABASES as MYDATABASES
In [3]: settings.configure(DATABASES=MYDATABASES)
更新:如果您使用Django 1.7,则还需要执行以下操作:
In [4]: import django; django.setup()
使用django.conf.settings.configure()
指定项目的数据库设置,然后您可以通常的方式访问所有模型。
如果您想自动化这些导入,您可以通过运行:
创建一个IPython配置文件ipython profile create mydjangoproject
每个配置文件都包含一个名为startup
的目录。您可以在其中放置任意Python脚本,它们将在IPython启动后立即执行。在此示例中,您可以在
~/.ipython/profile_<mydjangoproject>/startup/
只需在其中放置一个脚本,其中包含上面显示的代码,可能包含try..except
子句来处理ImportError
。然后,您可以使用给定的配置文件启动IPython,如下所示:
ipython qtconsole --profile=mydjangoproject
或
ipython notebook --profile=mydjangoproject
答案 4 :(得分:0)
您可以安装django extensions,然后运行
python manage.py shell_plus --ipython
答案 5 :(得分:0)
我还想在qtconsole中打开Django shell。看看manage.py里面为我解决了这个问题: 启动IPython qtconsole,cd到项目基目录并运行:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
别忘了将'myproject'更改为您的项目名称。
答案 6 :(得分:0)
您可以创建一个扩展base shell命令的命令,并像这样导入IPythonQtConsoleApp:
使用以下命令在yourapp / management /命令中创建文件qtshell.py:
from django.core.management.commands import shell
class Command(shell.Command):
def _ipython(self):
"""Start IPython Qt console"""
from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp
app = IPythonQtConsoleApp.instance()
app.initialize(argv=[])
app.start()
然后只使用python manage.py qtshell
答案 7 :(得分:0)
shell_plus
的一个未记录的功能是可以在“仅内核模式”下运行它。这使我们可以从另一个外壳(例如运行qtconsole的外壳)连接到它。
例如,在一个外壳中执行:
django-admin shell_plus --kernel
# or == ./manage.py shell_plus --kernel
这将打印出如下内容:
# Shell Plus imports ... ... To connect another client to this kernel, use: --existing kernel-23600.json
然后,在另一个shell中运行:
ipython qtconsole --existing kernel-23600.json
现在应该打开QtConsole。另一个提示,除了运行另一个shell外,您还可以按 Ctrl + Z ,然后运行bg
告诉当前进程在后台运行。