[解決済み] Jupyterノートブック上で* .IPYNBファイルから* .PYファイルを実行するにはどうすればよいですか?
質問
私はPythonノートブックに取り組んでいて、次のことを望んでいます。 大きな入力コード[input] を[* .PY]ファイルにパックし、ノートブックからこのファイルを呼び出します。 .
を実行する動作は、[ .PY] ファイルを Notebook から実行することは知られており、コマンドは Linux や Windows で異なります。 しかし、この動作をしてノートブックから[.PY]ファイルを実行すると、ノートブックに読み込まれた既存のライブラリや変数を認識しません(それはまるで[ .PY]ファイルがゼロから始まるようなものです...) .
これを修正する方法はありますか?
問題の簡略化された例として、以下のようなものが考えられます。
In[1]:
import numpy as np
import matplotlib.pyplot as plt
In[2]:
def f(x):
return np.exp(-x ** 2)
In[3]:
x = np.linspace(-1, 3, 100)
In[4]:
%run script.py
どこの"です。 script.py は、以下の内容を持ちます。
plt.plot(x, f(x))
plt.xlabel("Eje $x$",fontsize=16)
plt.ylabel("$f(x)$",fontsize=16)
plt.title("Funcion $f(x)$")
- 実際の問題では、ファイル [* .PY] は 4 行のコードではなく、もっと十分なコードを持っています。
どのように解決するのですか?
で
%run
マジックドキュメント
を見つけることができます。
-i は、空の名前空間ではなく、IPythonの名前空間でファイルを実行します。これは、インタラクティブに定義された変数に依存するテキストエディタで書かれたコードを実験している場合に便利です。
そのため
-i
を指定するとうまくいきます。
%run -i 'script.py'
正しい方法とは?
多分、上のコマンドはあなたが必要とするものだと思いますが、この質問が注目されているため、よりpythonicな方法がどのように見えるかを知らない人のために、もう少しセントを加えることにしました。
上記の解決策は少しハチャメチャで、他のファイルのコードを混乱させます(どこでこの
x
変数はどこから来たのか、そして
f
関数は何ですか?)
実際に他のファイルを何度も実行することなく、その方法を紹介したいと思います。
独自の関数やクラスを持つモジュールにし、Jupyterノートブックやコンソールからインポートするだけです。これはまた、簡単に再利用できるようになるという利点もあり、jupyters contextassistantは自動補完であなたを助け、もしあなたがdocstringを書いたならそれを表示することができます。
もし、常に他のファイルを編集しているのであれば
autoreload
が助けに来てくれます。
あなたの例は、次のようになります。
script.py
import matplotlib.pyplot as plt
def myplot(f, x):
"""
:param f: function to plot
:type f: callable
:param x: values for x
:type x: list or ndarray
Plots the function f(x).
"""
# yes, you can pass functions around as if
# they were ordinary variables (they are)
plt.plot(x, f(x))
plt.xlabel("Eje $x$",fontsize=16)
plt.ylabel("$f(x)$",fontsize=16)
plt.title("Funcion $f(x)$")
Jupyterコンソール
In [1]: import numpy as np
In [2]: %load_ext autoreload
In [3]: %autoreload 1
In [4]: %aimport script
In [5]: def f(x):
: return np.exp(-x ** 2)
:
:
In [6]: x = np.linspace(-1, 3, 100)
In [7]: script.myplot(f, x)
In [8]: ?script.myplot
Signature: script.myplot(f, x)
Docstring:
:param f: function to plot
:type f: callable
:param x: x values
:type x: list or ndarray
File: [...]\script.py
Type: function
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックで別ディレクトリのpyファイルをインポートする
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複