8

user_ns ディクショナリとプロファイル構成 (ipython_config.py とスタートアップ ファイル) を備えた組み込み IPython シェルを使用したいと考えています。目的は、起動時にモデルをインポートして Django シェルを実行することです。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

3 に答える 3

1

次の回避策を使用して独自の IPython 起動スクリプトを実行しましたが、それでも shell_plus を利用しています。

  1. shell_plus_startup.pyと同じディレクトリにというファイルを作成しますmanage.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 シェルを起動します)。

    python manage.py shell_plus

  3. 起動スクリプトを手動で実行します。

    In [1]: %run shell_plus_startup.py
    
  4. 次に、定義した変数、インポートしたモジュールなどを使用できます。

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

この回答も参照してください:djangoのshell_plusを介してipythonをスクリプト化する

于 2012-07-14T21:49:30.677 に答える
0

から始まるipython構成を自動的にロードしますdjango-extensions==1.5.6ipythonIPYTHON_ARGUMENTSを介して追加の引数を渡すこともできます。ドキュメント: http://django-extensions.readthedocs.org/en/latest/shell_plus.html#configuration

于 2015-09-07T21:23:46.720 に答える
0

django-extensions-shell_plus を使用している場合に機能する方法を見つけました。少しハックですが、この方法では起動ファイルが完全に自動的にロードされ、ipython セッションの開始時に実行コマンドを入力する必要がありません。

したがってshells.py、私は django_extensions dir からファイルを編集しました。私の場合は/usr/local/lib/python2.7/dist-packages/django_extensions/management/shells.py. 関数内にこれらの行を追加したため、環境パラメーターによって定義されたimport_objects(options, style):ファイルの内容がインポートされます。startup.pyPYTHONSTARTUP

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 に追加した行をどこに含めるか、より明確な方法があるのではないでしょうか? しかし、このアプローチは今のところ私にとってはうまくいきます。

于 2013-01-23T10:37:33.107 に答える