次のようなディレクトリ構造があります
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の相対インポートとは異なります。Python3は、一般的にはPython 3の相対インポートについて、特にパッケージディレクトリ内からスクリプトを実行することについて説明しています。これは、異なる一般的な側面と特定の側面の両方を持つ別のディレクトリのローカルモジュールの関数を呼び出そうとするjupyterノートブック内での作業に関係しています。
lib
ディレクトリにあります。
__init__
パッケージディレクトリにファイルはありますか?