私はかなり長い間、データ分析にjupyterノートブックを使用しました。 jupyterノートブックディレクトリでモジュールを開発し、その新しいモジュールをノートブックにインポートできるようにします。私のjupyterノートブックファイルディレクトリは、次のように表すことができます。
Jupyter notebooks\
notebook1.ipynb
new_module\
__init__.py
newfunction.py
currentnotebooks\
notebook2.ipynb
Notebook1.ipynbでimport new_module
を使用すると、notebook2.ipynbで同じコマンドを実行すると機能しますが、次のImportError: No module named 'new_module'
が表示されます。 2つの明らかな解決策は、A)new_moduleをcurrentnotebooksディレクトリに移動するか、B)notebook2.ipynbをnew_moduleと同じレベルに移動することです。ファイル構造をいじりたくありません。これは可能ですか?
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
のノートブックに対してこのコードをnot実行する必要があります。おそらく望ましくないパス。
インポートがnotebook1
で機能する理由は、sys.pathに''
(空の文字列)が含まれており、実行中のインタープリター(この場合はカーネル)の現在のディレクトリから離れているためです。 Googleでexplain python path
を検索すると、pythonがPYTHONPATH
(別名sys.path
)をどのように使用するかについてのいくつかの良い説明が見つかります。