2012-04-08 76 views
7

我想使用帶有user_ns字典和我的配置文件配置(ipython_config.py和啓動文件)的嵌入式IPython shell。目的是在啓動時導入模型來運行Django shell。 Django的擴展實現了一個名爲shell_plus命令可以做到這一點:在嵌入式IPython中運行配置文件啓動文件t實例

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) 

的問題是,這不加載我的啓動文件。嵌入()調用load_default_config(),我想圖加載ipython_config.py。

如何使嵌入式IPython實例運行我的配置文件啓動文件?

+0

'manage.py shell'也是如此,啓動文件不會被執行。希望他們能很快解決這個問題。 (ps,v 0.13) – Paolo 2012-07-12 20:28:30

回答

1

我用以下解決方法來經營自己的IPython的啓動腳本,但仍然需要shell_plus的優勢:

  1. 創建一個在同一目錄下名爲shell_plus_startup.pymanage.py文件。例如:

    # File: shell_plus_startup.py 
    # Extra python code to run after shell_plus starts an embedded IPython shell. 
    # Run this file from IPython using '%run shell_plus_startup.py' 
    
    # Common imports 
    from datetime import date 
    
    # Common variables 
    tod = date.today() 
    
  2. 啓動shell plus(啓動嵌入式IPython shell)。

    python manage.py shell_plus

  3. 手動運行啓動腳本。

    In [1]: %run shell_plus_startup.py 
    
  4. 然後你可以使用你定義的變量,模塊已經導入等

    In [2]: tod 
    Out[2]: datetime.date(2012, 7, 14) 
    

也看到這樣的回答:scripting ipython through django's shell_plus

0

我找到了一種方法如果你使用的是django-extensions-shell_plus,那麼這個方法就行得通。這有點不好意思,但通過這種方式,您的啓動文件會自動加載,並且您不必在ipython會話開始時輸入任何運行命令。

因此,我編輯了django_extensions目錄中的文件shells.py,這在我的情況下位於/usr/local/lib/python2.7/dist-packages/django_extensions/management/shells.py。我在函數import_objects(options, style):中添加了這些行,因此它會導入由環境參數PYTHONSTARTUP定義的文件startup.py的內容。

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腳本。我的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的行?但是現在這種方法對我來說工作得很好。

+0

我將上面的更改推送到了django-extensions的fork中:https://github.com/ifischer/django-extensions – ifischer 2013-01-31 10:01:50