[解決済み] Python 3を使ったJupyter Notebookで、別のディレクトリにあるモジュールから相対importでローカル関数をインポートする
質問
以下のようなディレクトリ構造になっています。
meta_project
project1
__init__.py
lib
module.py
__init__.py
notebook_folder
notebook.jpynb
で作業する場合
notebook.jpynb
関数にアクセスするために相対インポートを使おうとすると
function()
で
module.py
を使っています。
from ..project1.lib.module import function
以下のようなエラーが発生します。
SystemError Traceback (most recent call last)
<ipython-input-7-6393744d93ab> in <module>()
----> 1 from ..project1.lib.module import function
SystemError: Parent module '' not loaded, cannot perform relative import
相対的なインポートを使ってこれを動作させる方法はありますか?
注意:ノートブックサーバーのインスタンスは
meta_project
ディレクトリにあるので、これらのファイルの情報にアクセスできるはずです。
また、少なくとも元々意図されていたように
project1
はモジュールとして考えられておらず、したがって
__init__.py
ファイルは、単にファイルシステムのディレクトリという意味でした。もし、問題を解決するために、モジュールとして扱って
__init__.py
ファイル(たとえ空白でも)でも構いませんが、そうすることで問題が解決するわけではありません。
私はこのディレクトリをマシン間で共有しており、相対インポートによってどこでも同じコードを使用することができます、& 私はしばしば迅速なプロトタイピングのためにノートブックを使用するので、絶対パスを一緒にハックすることを含む提案は役に立ちそうにありません。
編集:これは、以下のようなものです。 Python 3 における相対的なインポート は、一般的な Python 3 の相対インポートと、特にパッケージディレクトリ内からのスクリプトの実行について述べています。これは、jupyter notebookの中で、別のディレクトリにあるローカルモジュールの関数を呼び出そうとする作業と関係があり、一般的な側面と特殊な側面の両方を持っています。
解決方法は?
私は、あなたとほぼ同じ例で このノートブック 隣接するモジュールの関数の使い方をDRYに説明したかったからです。
私の解決策は、このようなスニペットをノートブックに追加することで、Pythonに追加モジュールのインポートパスを伝えることでした。
import os
import sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
sys.path.append(module_path)
これにより、モジュール階層から目的の関数をインポートすることができます。
from project1.lib.module import function
# use the function normally
function(...)
を追加する必要があることに注意してください。
__init__.py
ファイルを
プロジェクト1/
と
lib/
フォルダを作成してください。
関連
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み] ローカルディレクトリからrequirements.txtファイルに従ってpipを使用してパッケージをインストールするにはどうすればよいですか?
-
[解決済み] 億の相対的輸入
-
[解決済み] 相対パスからモジュールをインポートする
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み] import文の変更点 python3
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
python call matlab メソッドの詳細
-
Python Decorator 練習問題
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み] Jupyterノートブックで別ディレクトリのpyファイルをインポートする
-
[解決済み】Python 3での相対インポート