Django用のJupyter/IPython Notebookをセットアップするには?
質問
で説明されている方法を使っています。 この投稿 で説明されている方法を使用しています。この方法の要点は、 DJANGO_SETTINGS_MODULE を設定する IPython 拡張を作り、IPython の起動時に django.setup() を実行することです。
拡張機能のコードは
def load_ipython_extension(ipython):
# The `ipython` argument is the currently active `InteractiveShell`
# instance, which can be used in any way. This allows you to register
# new magics or aliases, for example.
try:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
import django
django.setup()
except ImportError:
pass
最近の Jupyter Notebook へのアップグレードで、このセットアップは私のために壊れています。ノートブックの最初のセルに同じようなコードを追加することで、Jupyter ノートブックで Django のコードを実行できるようになりました。しかし、私は Jupyter が自動的に拡張機能を実行する方法を見つけることができず、私が作成しているすべてのノートブックで再びこれを行う必要がなくなりました。
DjangoとJupyterをうまく連携させるためにはどうしたらよいでしょうか?
UPDATEしました。 For @DarkLight - 私は Django 1.8.5 with Jupyter 1.0.0 を使っています。 私がノートブックで実行しているコードは、以下の通りです。
import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsfile")
import django
django.setup()
どのように解決するのですか?
念のため(ただし2018年なので、この質問が投稿されてから状況が変わったかもしれません):実際にJupyter PythonカーネルをDjango環境にインストールすると、別のJupyterサーバ/環境(ウィジェット、拡張、テーマの変更などをインストールしたもの)に接続(下で実行)することが可能です。
django_extensions
はまだ必要な作業の一部しかしていません :-)
これは、Django とは別の Jupyter 仮想環境を持っていて、そのカーネルや拡張が、--user
. すべての Jupyter 拡張(とその依存関係)は、Django のものの代わりにこの仮想環境にインストールされます(pandas や matplotlib などを Django のコードと一緒に使う必要がある場合は、Django 環境に必要なままです)。
Django の仮想環境 (バージョン 2 のインタプリタを含む、異なるバージョンの Python を実行可能) に、 ipython カーネルをインストールします。
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
これはユーザーのJupyterカーネルディレクトリに指定された --name のカーネル設定ディレクトリを作成します(Linuxでは
~/.jupyter/
であり、OSXでは
~/Library/Jupyter/
を含む) kernel.json ファイルと画像/アイコン (デフォルトでは、インストールするカーネル用のデフォルトの Jupyter アイコンが使用されます) が含まれています。このカーネルは、作成時にアクティブだった仮想環境内で実行され、Django プロジェクトで使用する python の全く同じバージョンと、インストールされた全てのモジュールを使用します。
実行中
./manage.py shell_plus --notebook
を実行すると非常に似たことができますが、現在のvenvにインストールされているすべてのもの(Jupyterサーバーとすべての拡張機能を含む)を必要とすることに加えて、プロジェクトのルートと異なるディレクトリのノートブックを実行することができません(プロジェクトのルートには
./manage.py
). さらに、仮想環境ではなく、パス上で最初に見つかった python と呼ばれる実行ファイルを使用してカーネルを実行するため、アクティブな Django 仮想環境内でコマンドラインから起動しない場合、動作がおかしくなります。
これらの問題を解決して、設定した任意の Django プロジェクトの内部で動作する Notebook を作成し、ファイルシステム上の任意の場所に保存された Notebook を実行できるようにするためには、次のようにする必要があります。
- 最初の 'argv' パラメータに、仮想環境に含まれる Python インタプリタのフルパスが含まれていることを確認する。
- シェル環境変数を含む 'env' セクションを (まだ存在しないなら) 追加し、 Python に我々のプロジェクトがどこで見つかるか、どの Django 設定を使うべきかを伝えるために、これらを使用します。これを行うには、以下のようなものを追加します。
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
}
- optional: 'display_name' を人間にとって使いやすいものに変更し、アイコンを置き換えます。
この環境の kernel.json ファイルを編集すると、似たようなものが表示されます。
{
"display_name": "My Project",
"language": "python",
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
},
"argv": [
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
]
}
注目のセリフ
-
"DJANGO_SETTINGS_MODULE": "my_project.settings".My_project.Settings"。 : 通常はプロジェクトのmanage.pyにあるように、あなたの設定です。
-
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project".PYTHONPATH:/home/projectuser/projectfolder/my_project" : PYTHONPATH はプロジェクトのメインディレクトリ (manage.py を含むディレクトリ) を含むように拡張され、カーネルがその正確なディレクトリで実行されていなくても設定が見つかるようにします (ここでは django_extensions は一般的な
python
を使うので、Jupyter サーバ全体がその内部から起動されない限り、間違った仮想環境を実行します: django_extensions が作成する kernel.json にこれを追加すれば、Django プロジェクトディレクトリのどこでもノートブックを実行できるようになります) -
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python".XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX; : カーネル実行の第一引数 (argv リスト) には、プロジェクトの仮想環境の python インタプリタのフルパスを指定します (これも django_extensions が間違っている点です。これを修正すれば、どのノートブックサーバでも特定の Django 環境のカーネルとそのインストール済みモジュールをすべて実行できるようになります)。
-
"django_extensions.management.notebook_extension"。 : これはノートブックの 'shell_plus' 機能を読み込むための拡張機能です (オプションですが便利です :-) )
関連
-
[解決済み】Jupyter Notebookが保存されない:postに'_xsrf'引数がない
-
[解決済み] ブラウザでJupyter/ipythonノートブックのセル幅を広げるにはどうすればよいですか?
-
[解決済み] Django vs. Model View Controller [終了しました]。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み】IPython NotebookでLaTeXを記述する方法は?
-
[解決済み】IPythonのノートブックのマークダウンに画像を挿入する
-
[解決済み】IPython/Jupyter notebookの作業ディレクトリを変更する。
-
[解決済み] django : select_related と get_object_or_404 を一緒に使用する。
-
[解決済み] Django の {% url %} テンプレートタグでクエリパラメータを渡すことは可能でしょうか?
-
[解決済み] Django 1.9 の apps.py の目的は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django store to databaseは現地時間より8時間短い?(2021-05-12更新)
-
[解決済み] [Solved] カスタムDjango manage.pyコマンドをテストドライバから直接呼び出すにはどうしたらいいですか?
-
[解決済み] Docker-Compose使用時にDjangoデータベースのマイグレーションをどのように行うか?
-
[解決済み] Django テンプレート url タグに url パラメータを追加する方法は?
-
[解決済み] 学習に適したオープンソースのdjangoプロジェクト【非公開
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?
-
[解決済み] RESTful API のトークン認証:トークンは定期的に変更する必要がありますか?
-
[解決済み] Django で https 接続を非 https 接続と同じように簡単にテストするには 'runserver' を使うには?
-
[解決済み] django のユニットテストを複数のファイルに分散させるには?
-
[解決済み] あるdjangoアプリから新しいアプリにモデルを移行するにはどうしたらいいですか?