2016-09-02 4 views
11

저는 꽤 오래 데이터 분석을 위해 jupyter 노트북을 사용했습니다. 내 jupyter 노트북 디렉토리에 모듈을 개발하고 그 새로운 모듈을 노트북에 가져올 수 있습니다. 내 jupyter 노트북 파일 디렉토리는 다음과 같이 나타낼 수 있습니다.jupyter 노트북 디렉토리의 모듈을 하위 디렉토리의 노트북으로 가져 오는 방법은 무엇입니까?

Jupyter notebooks\ 

    notebook1.ipynb 

    new_module\ 
     __init__.py 
     newfunction.py 

    currentnotebooks\ 
     notebook2.ipynb 

때 나는 내가 ImportError: No module named 'new_module' 다음 얻을 notebook2.ipynb에서 같은 명령을 시도 할 때 그러나 작동 notebook1.ipynb에서 사용 import new_module. 두 가지 확실한 해결책은 A) new_module을 현재의 notebooks 디렉토리로 이동하거나 B) notebook2.ipynb를 new_module과 동일한 레벨로 이동시키는 것입니다. 나는 파일 구조를 전혀 뒤죽박죽하고 싶지 않다. 이것이 가능한가?

+0

'new_module'을'sys.path'에 나열된 디렉토리 중 하나에 넣으면 어디에서나 가져올 수 있습니다. –

답변

15

new_module의 상위 디렉토리가 파이썬 경로에 있는지 확인해야합니다. new_module보다 한 레벨 아래에있는 노트북의 경우,이 코드는 트릭을 할 것입니다 : 당신이 더 아래 디렉토리 계층의 경우

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이 설정되는 방식을 조정해야합니다,하지만 그게 다야. 이 아닌Jupyter notebooks의 노트북 코드를 실행해야합니다. 이는 디렉토리의 부모를 python 경로에 추가하기 때문에 바람직하지 않을 수 있습니다.

notebook1에 대한 가져 오기가 작동하는 이유는 sys.path에 '' (빈 문자열)이 포함되어 있기 때문에 실행중인 인터프리터 (이 경우 커널)의 현재 디렉토리가됩니다. explain python path에 대한 Google 검색은 어떻게 파이썬이 PYTHONPATH (일명 sys.path)을 사용했는지에 대한 여러 가지 좋은 설명을 보여줍니다.

+0

위의 폴더 중 하나 일지라도 다른 모듈에 액세스하려면 먼저 제안 된 상용구 코드를 작성해야합니다. 이를 달성 할 수있는 다른 적절한 방법이없는가요? 상대 수입을 통해? (비록 내가 아직도 상대 수입이 어떻게 작동하는지에 대해 확신 할 수 없다는 것을 인정해야하지만) –

+1

다소 다르다. 예외는 부모 ​​디렉토리가 모듈이기도하고 (그래서 '__init __. py' 파일을 가졌을 때), 그것은 저에게 이상하고 거의 없을 것 같습니다. 노트북 디렉토리를'PYTHONPATH'에두면이 방법으로 sys.path에 추가 할 필요가 없습니다. – cco