Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在qtconsole模式下使用ipython启动django shell?_Python_Django_Shell_Ipython - Fatal编程技术网

如何在qtconsole模式下使用ipython启动django shell?

如何在qtconsole模式下使用ipython启动django shell?,python,django,shell,ipython,Python,Django,Shell,Ipython,当我通过键入python manage.py shell启动django shell时 外壳启动了。是否可以使Django在模式下启动ipython?(即,使其在qtconsole上运行ipython) 阿瑞克 编辑: 因此,我正在尝试Andrew Wilkinson在回答中提出的方法——使用基于原始django shell命令的命令扩展我的django应用程序。据我所知,以原始版本启动ipython的代码如下: from django.core.management.base import N

当我通过键入
python manage.py shell启动django shell时
外壳启动了。是否可以使Django在模式下启动ipython?(即,使其在qtconsole上运行
ipython

阿瑞克

编辑: 因此,我正在尝试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)
现在我可以导入我的模型,列出所有实例等了。

文档上说:

如果您不想使用manage.py,没问题。只要设定 DJANGO_SETTINGS_模块环境变量到mysite.SETTINGS并运行 位于同一目录manage.py中的python(或确保 目录位于Python路径上,以便导入mysite)


因此,设置该环境变量,然后运行
ipythonqtconsole
就足够了。您可以制作一个简单的脚本来自动执行此操作。

您可以检查运行shell的代码。您将看到,没有配置运行哪个shell的位置


您可以做的是复制此文件,将其重命名为shell_qt.py,并将其放置在您自己项目的management/commands目录中。将其更改为运行QT控制台,然后可以运行
manage.py shell_QT

我创建了一个具有以下内容的shell脚本:

/path/to/ipython
qtconsole --pylab inline -c "run /path/to/my/site/shell.py"
如果您想要酷的内联matplotlib图形,您只需要
--pylab inline
部分

我在
/path/to/my/site
中创建了一个python脚本
shell.py

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的优点。

您可以安装并运行它

python manage.py shell_plus --ipython

自Django版本1.4以来,不推荐使用
Django.core.management.setup_environ()
。适用于IPython笔记本电脑和QTconsole的解决方案如下(只需在Django项目目录中执行):

更新:如果使用Django 1.7,还需要执行以下操作:

In [4]: import django; django.setup()
使用,可以指定项目的数据库设置,然后可以按常规方式访问所有模型

如果要自动化这些导入,例如,可以通过运行以下命令创建IPython配置文件:

ipython profile create mydjangoproject
每个配置文件都包含一个名为
startup
的目录。您可以将任意Python脚本放入其中,它们将在IPython启动后立即执行。在本例中,您可以在下面找到它

~/.ipython/profile_<mydjangoproject>/startup/


我还想在qtconsole中打开Django shell。查看manage.py,为我解决问题: 将IPython qtconsole、cd启动到project base目录并运行:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

不要忘记将“myproject”更改为您的项目名称。

您可以创建一个扩展基本shell命令并导入IPythonQtConsoleApp的命令,如下所示:

使用以下命令在yourapp/management/commands中创建文件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

shell plus
的一个有点没有文档化的特性就是能够在“仅内核模式”下运行它。这允许我们从另一个shell连接到它,比如一个正在运行的qtconsole

例如,在一个shell中执行以下操作:

django-admin shell_plus --kernel
# or == ./manage.py shell_plus --kernel
这将打印出如下内容:

然后,在另一个shell运行中:

ipython qtconsole --existing kernel-23600.json

这将打开一个QT控制台。另一个技巧是,不运行另一个shell,您也可以按Ctrl+Z,然后运行
bg
,告诉当前进程在后台运行。

可能还没有一个简单的命令来运行它,但它肯定可以运行。您是否可以接受,如果您在
/usr/local/bin
中将
ipython
别名为
ipython qtconsole
?@Unapiedra:我认为这行不通。Django通过在Python级别导入和调用ipython来启动ipython,而不是使用shell命令。@Unapiedra:您介意告诉我如何操作吗?我通常使用.bashrc来创建别名,但不确定如何创建别名file@ThomasK:好的,我不确定它是如何做到的。我如何更改代码以运行qt控制台-您能帮我吗?,因此,您还必须将您的django项目位置添加到path,但django在设置方面仍然存在一些问题—当我想要列出模型中的所有对象时,它说我没有设置db engine-1。此命令仅在终端中启动IPython,并预加载所有模型。它不会在qtconsole模式下启动IPython。所以这不是这个问题的正确答案。在新安装ipython之后,这对我来说不再有效了。ipython qtconsole似乎不再接受-c标志。我换成了托马斯·K的答案。
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()
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
ipython qtconsole --existing kernel-23600.json