次のようなディレクトリ構造があります
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 ノートブック内での作業に関係しています。