web-dev-qa-db-ja.com

保存して実行したいPython Jupyter Notebook(Anaconda)のスクリプト

別のpython初心者です。現在、anacondaフレームワークでJupypterノートブックを使用しています。

IPython Notebookを使用してプロジェクトを進めるために、

ノートブックでpythonスクリプト(tp.pyファイル)のいくつかを実行する必要があります。

from tp import wordtoplural  

それ以来、ノートブック自体ですべての機能を定義する代わりに、作業がはるかに簡単になります。

どうすればよいですか。現在、コードでimporterrorsが発生しています。

ImportError: cannot import name wordtoplural

  1. iPythonノートブックとpython script(.py)は同じフォルダーにあります。
  2. そのディレクトリにも空の__init.py__fileを追加しました。
6
SUNDONG

Ipythonノートブックがpythonスクリプトと同じフォルダーにあることを確認してください。また、pythonと同じフォルダーに、空の__init__.pyファイルを作成する必要がある場合があります。 =インポートを機能させるためのスクリプト。

おそらくpythonスクリプトを変更して、ノートブックで直接テストすることになるので、インポートしたモジュールを今行った変更で自動的に更新する自動再読み込みプラグインに興味があるかもしれません。あなたのpythonスクリプト:

%load_ext autoreload
%autoreload 2

自動リロードプラグインを呼び出した後、インポートを配置する必要があることに注意してください。

場合によっては、IPythonノートブックの最初のセルの最上部(%magicsの後)にこれを追加する必要があることにも注意してください。

from __future__ import absolute_import

制限事項:自動再読み込みは、一般にモジュールのコードの任意の部分を再読み込みするのに適していますが、新しいクラスメソッドなど、いくつかの例外があります。メソッドの名前を追加または変更する場合は、カーネルを再読み込みする必要があります。それ以外の場合は、このメソッドの古い定義をロードし続けるか、解決に失敗します(メソッドが見つかりません)。これは、マジックメソッドをオーバーロードしているときに特に混乱する可能性があります(したがって、この場合、デフォルトのマジックメソッドが呼び出されます。定義!)。次に、メソッド名が定義され、カーネルがリロードされると、このメソッドのコードを自由に変更でき、新しいコードが自動的にリロードされます。

また、変更したクラスでsuper()呼び出しを使用すると失敗します。これが発生した場合は、カーネルをリロードする必要もあります。

7
gaborous

ああ、私は私が望む解決策を見つけました。

Jupyter Notebookでは、セルをpythonスクリプトに直接転送できます。

Ipythonチュートリアルで見つけました。これを参照できます [。ipynb file]

ノートブックの以下のセルを実行することにより、直接転送することができます

同じディレクトリの.pyファイルにコードを記述します。

%%writefile textproc.py

def plural(Word):
    if Word.endswith('y'):
        return Word[:-1] + 'ies'
    Elif Word[-1] in 'sx' or Word[-2:] in ['sh', 'ch']:
        return Word + 'es'
    Elif Word.endswith('an'):
        return Word[:-2] + 'en'
    else:
        return Word + 's'

次に、この.pyファイルを次のようにインポートすることで取得できます。

from textproc import plural
plural('wish')

しかし、別のディレクトリに保存されている.pyファイルにアクセスする方法がわかりませんでした(インポート手順..など)

3
SUNDONG