我想使用一个嵌入式的IPython shell,里面有user_ns字典和我的配置文件(ipython_config.py和启动文件),目的是运行一个Django shell,在启动时导入模型。django-extensions实现了一个shell_plus命令,它可以完成以下操作:
https://github.com/django-extensions/django-extensions/blob/master/django_extensions/management/commands/shell_plus.py
from IPython import embed
embed(user_ns=imported_objects)
问题是这不会加载我的启动文件。embed()调用load_default_config(),我认为它会加载ipython_config. py。
如何让嵌入式IPython示例运行我的概要文件启动文件?
4条答案
按热度按时间3qpi33ja1#
我使用了以下解决方案来运行我自己的IPython启动脚本,但仍然利用了shell_plus:
1.在与
manage.py
相同的目录中创建名为shell_plus_startup.py
的文件。例如:1.启动shell plus(启动嵌入式IPython shell)。
python manage.py shell_plus
1.手动运行启动脚本。
1.然后你可以使用你定义的变量,你导入的模块,等等。
另请参见以下答案:scripting ipython through django's shell_plus
vtwuwzda2#
我发现了一个方法,如果你使用django-extensions-shell_plus,它是有点笨拙,但是用这个方法你的启动文件是完全自动加载的,你不需要在你的ipython会话开始时输入任何run-command。
因此我从django_extensions目录中编辑了
shells.py
文件,在我的例子中它位于/usr/local/lib/python2.7/dist-packages/django_extensions/management/shells.py
中。我在import_objects(options, style):
函数中添加了这些行,这样它就导入了由环境参数PYTHONSTARTUP
定义的startup.py
文件的内容。现在,当我启动shell_plus-shell时,我将环境变量赋给我的启动python脚本,启动shell的bash脚本如下所示:
现在我可以访问从ipython会话开始时在www.example.com中定义的所有方法和变量startup.py。
因此,您可以重用它,并为每个项目定制启动文件,预加载不同的方面。
也许有一种更干净的方法来包含我添加到www.example.com的行shells.py?但这种方法目前对我来说很好用。
nukf8bse3#
它会自动从
django-extensions==1.5.6
开始加载您的ipython配置。您也可以通过IPYTHON_ARGUMENTS向ipython
传递其他参数。http://django-extensions.readthedocs.org/en/latest/shell_plus.html#configuration5anewei64#
另一种方法是使用从
InteractiveShellEmbed
和InteractiveShellApp
派生的类。不完整的示例代码: