다음과 유사한 디렉토리 구조가 있습니다.
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 노트북 내에서 작업하는 것과 관련이 있습니다.
lib
디렉토리에 있습니다.
__init__
패키지 디렉토리에있는 파일은?