2016-09-02 7 views
11

私はかなりいつかのためのデータ解析にjupyterノートブックを使用していました。私はジュピターのノートブックディレクトリにモジュールを開発し、その新しいモジュールをノートブックにインポートできるようにしたいと考えています。私のジュピターノートファイルのディレクトリは次のように表すことができます。jupyterノートブックディレクトリのモジュールを下位のディレクトリのノートブックにインポートするにはどうすればよいですか?

notebook1.ipynbでの使用 import new_moduleが、それは私がnotebook2.ipynbで同じコマンドをしようとすると、私は次のよう ImportError: No module named 'new_module'を得るしかし作品
Jupyter notebooks\ 

    notebook1.ipynb 

    new_module\ 
     __init__.py 
     newfunction.py 

    currentnotebooks\ 
     notebook2.ipynb 

。 2つの明白な解決策は、A)new_moduleを現在のノートブックディレクトリに移動するか、またはB)notebook2.ipynbをnew_moduleと同じレベルに移動することです。私はファイル構造をまったく使いこなしたくありません。これは可能ですか?

+0

、それがどこからでもインポート可能になります。 –

答えて

15

あなたはnew_moduleの親ディレクトリは、あなたのPythonパス上にあることを確認する必要があります。 new_module 1レベル下でのノートブックの場合、このコードは、トリックを行います:あなたがさらに下のディレクトリ階層内であれば

import os 
import sys 
nb_dir = os.path.split(os.getcwd())[0] 
if nb_dir not in sys.path: 
    sys.path.append(nb_dir) 

は、あなたがnb_dirが設定されている方法を調整する必要がありますが、それがすべてです。それはおそらく望ましくないPythonのパスにそのディレクトリの親を追加しますので、あなたはは、Jupyter notebooksでノートブックのこのコードを実行するべきではありません。

notebook1のインポートが機能する理由は、sys.pathには''(空の文字列)が含まれています。これは実行中のインタープリタ(この場合はカーネル)の現在のディレクトリです。 explain python pathのためのGoogle検索は、Pythonが(別名sys.pathPYTHONPATHを使用する方法にはいくつかの良い説明を折り返します。あなたが `` sys.path`に記載されているディレクトリのいずれかにnew_module`を置く場合

+0

他のモジュールにアクセスできるようにするには、あなたが推奨するボイラープレートのコードを、上記のフォルダの1つにすぎない場合でも、必ず実行する必要があります。これを達成する他の適切な方法はありませんか?相対輸入によって? (しかし、私はまだ相対輸入がどのように働くかについてはまだわからないと認めなければならないが) –

+1

多かれ少なかれ。例外は、親ディレクトリがモジュールであっても(そして、 '_init __。py'ファイルを持っていた)場合ですが、それは私にとっては奇妙ではないようです。ノートディレクトリを 'PYTHONPATH'に置くと、これをsys.pathに追加する必要はありません。 – cco

関連する問題