如果您使用 django-extensions-shell_plus,我找到了一种可行的方法。这有点 hacky,但是通过这种方式,您的启动文件会完全自动加载,您不必在 ipython-session 开始时键入任何运行命令。
因此,我shells.py
从 django_extensions 目录编辑了文件,在我的情况下,该目录位于/usr/local/lib/python2.7/dist-packages/django_extensions/management/shells.py
. 我在函数中添加了这些行import_objects(options, style):
,因此它导入了startup.py
由环境参数定义的文件的内容PYTHONSTARTUP
。
def import_objects(options, style):
# (...)
import os, sys, pkgutil
if 'PYTHONSTARTUP' in os.environ:
try:
sys.path.append(os.environ['PYTHONSTARTUP'])
import startup
content = [element for element in dir(startup) if not element.startswith('__')]
for element in content:
imported_objects[element] = getattr(startup, element)
except Exception, ex:
sys.exit("Could not import startup module content, Error:\n%s" % ex)
现在,当我启动 shell_plus-shell 时,我将环境变量提供给我的启动 python 脚本。我启动 shell 的 bash 脚本如下所示:
#!/bin/bash
export PYTHONSTARTUP=/home/ifischer/src/myproject/startup.py # tells shell_plus to load this file
python /home/ifischer/src/myproject/manage.py shell_plus --ipython
现在我可以访问从 ipython 会话开始时在 startup.py 中定义的所有方法和变量。
因此,您可以重用它并为每个项目自定义启动文件,预加载不同的方面。
也许有一种更简洁的方法来包含我添加到 shells.py 的行?但是这种方法目前对我来说很好。