这个问题:Automatically import models on Django shell launch有答案解释如何在开始时使用shell_plus导入模型,但没有解答如何一般地运行代码。
但是有一种简单的方法可以运行python脚本吗?
python manage.py shell [or shell_plus] --run=script.py
只需运行脚本就像在shell启动时输入整个内容一样。
我意识到你可以在shell中导入东西,但是它们会被卡在命名空间中。
我认为ipython应该有办法运行脚本,然后将其locals()
导入到顶层命名空间。在这种情况下,你可以做%magic script.py
,我们只需要一步,这将很好。
更改启动shell的方式应该没问题 - 主要目标是能够创建一个在shell启动时运行的文件。
答案 0 :(得分:2)
您可以像shell_plus
一样创建自己的自定义命令:请参阅shell_plus
命令的source以了解具体方法。在该代码中,您可以在启动shell之前指定并运行需要执行的文件。 Django关于creating custom commands的文档也很有用。
答案 1 :(得分:2)
您可以尝试使用环境变量PYTHONSTARTUP。 还可以尝试使用django-extensions:django-extensions
请参阅django-extensions / management / commands / shell_plus.py命令。
从这个命令的源代码我看到它尊重PYTHONSTARTUP env变量。
答案 2 :(得分:2)
shell_plus使用有限形式的IPython,它不会处理它的启动和启动。配置,它击败了django + ipython shell启动时运行的大多数正常尝试。您可以将其切换为使用可以解决大多数问题的完整版本。
修改django_extensions / management / commands / shell_plus.py
删除:
embed(user_ns=imported_objects)
并将其替换为:
from IPython import start_ipython
start_ipython(argv=[], user_ns=imported_objects)
然后将加载启动目录中的python代码。
答案 3 :(得分:1)
不确定是否有可以使用的标志,但是如果你安装了ipython,它应该简单如下:
ipython
然后当你出现提示时:
run script.py
然后:
run manage.py shell