source

주피터 노트북의 다른 디렉터리에 있는 py 파일 가져오기

ittop 2023. 5. 27. 11:58
반응형

주피터 노트북의 다른 디렉터리에 있는 py 파일 가져오기

제 질문은 이것과 관련이 있습니다.저는 주피터 노트북에서 파이썬 3.6을 사용하고 있습니다.나의 프로젝트 디렉토리는/user/project이 디렉터리에서 여러 모델을 만들고 있으며 각각의 폴더가 있습니다., 하만이, 다가 있습니다.functions.py모든 모델에서 사용할 기능이 있는 파일입니다.그래서 나는 그것을 유지하고 싶습니다.functions.py줄을 지어 들어가다/user/project하지만 그것을 말할 수 있는 것은.ipynb줄을 지어 들어가다/user/project/model1,/user/project/model2 하나요?어떻게 해야 하나요?

다른 디렉터리에 python 파일을 가져오는 간단한 방법은 없습니다.이것은 주피터 노트와 관련이 없습니다.

당신의 문제에 대한 3가지 해결책이 있습니다.

  1. 가져올 파일이 들어 있는 디렉터리를 경로에 추가한 다음 다음과 같이 파일을 가져올 수 있습니다.
import sys  
sys.path.insert(0, '/path/to/application/app/folder')

import file
  1. ▁an▁having▁by▁empty▁a▁module다▁local를 사용하여 로컬 모듈을 생성할 수 .__init__.py파일을 가져올 폴더에 저장합니다.폴더 계층과 관련하여 고려해야 하는 몇 가지 이상한 규칙이 있습니다.

  2. 가져오려는 파일에 대한 모듈을 생성하여 전체적으로 설치할 수 있습니다.

폴더 이름이 Jupyter이고 nn_webserver라는 다른 폴더에서 모듈(직원)을 가져오려고 한다고 가정합니다.

시각화:

여기에 이미지 설명 입력

수행:

import sys
import os

module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
    sys.path.append(module_path+"\\nn_webserver")

from employee import motivation_to_work

@metakermit에서 추가 정보 보기

나는 이 문제에 대해 생각해 왔습니다. 왜냐하면 나는 그것을 좋아하지 않기 때문입니다.sys.path.append()例들.하여 현재 하는 것입니다.제가 제안하는 솔루션은 내장된 주피터 매직 명령을 사용하여 현재 작업 디렉토리를 변경합니다.다음과 같은 파일 구조를 가지고 있다고 가정합니다.

project
├── model1
|   └── notebook1.ipynb
├── model2
|   └── notebook2.ipynb
└── functions.py

functionsnotebook1.ipynb또는notebook2.ipynb패키지를 가져오는 셀 앞에 다음 행을 가진 셀을 추가하기만 하면 됩니다.

%cd ..

이렇게 하면 현재 작업 디렉터리가 노트북의 상위 디렉터리로 변경되고, Python이 패키지를 검사할 기본 위치에 함수 모듈의 경로가 추가됩니다.오기가를 functions:

import functions

이는 가져올 동일한 패키지 디렉터리에 여러 모듈이 있는 경우에도 마찬가지로 작동합니다.

project
├── model1
|   └── notebook1.ipynb
├── model2
|   └── notebook2.ipynb
└── package
    ├── functions1.py
    └── functions2.py 

모두 할 수 .functions1그리고.functions2package다음과 같이:

from package import functions1, functions2

EDIT: 아래에 지적된 바와 같이, Magic 명령이 포함된 셀을 두 번 이상 실행하면 로컬 가져오기가 더 이상 작동하지 않습니다(명령을 다시 실행할 때마다 현재 작업 디렉터리가 위의 디렉터리로 변경됨).일이 , 이런일일하위기해않도록지어이,%cd ..여러 번 실행되지 않도록 가져오기 에 노트북 상단의 자체 셀(가져오기와 동일한 셀이 아님)에 명령이 있어야 합니다.커널을 다시 시작하고 모든 셀을 실행하면 현재 작업 디렉터리가 재설정되지만 원하는 가져오기/결과가 여전히 반환됩니다.

저는 과거에 주피터 노트북이 로드하려는 라이브러리에 대한 심볼릭 링크를 디렉터리에 만들어 모듈이 올바른 경로에 있는 것처럼 동작하도록 함으로써 이 문제를 해결했습니다.따라서 위의 예에서는 주피터 셀 내부의 디렉토리당 다음 명령을 한 번씩 실행합니다.

!ln -s /user/project/functions.py functions.py

그런 다음 을 사용하여 가져올 수 있습니다.

import functions

참고: Linux와 Mac OS에서만 사용해 보았기 때문에 Windows는 보증할 수 없습니다.

는 설하는것좋다니를 설치하는 합니다.functions.py가상 환경에서 패키지로 사용할 수 있습니다.이를 통해 얻을 수 있는 이점은 다음과 같습니다.

  1. 액세스할 수 있습니다.functions.py주어진 환경(커널)에 있는 iPython 노트북의 파일입니다.
  2. 변후한경을능에서 기능을 functions.py파일, 당신은 iPython 노트북을 계속해서 다시 로드할 필요가 없습니다.변경할 때마다 자동으로 다시 로드됩니다.

다음과 같은 방법으로 수행할 수 있습니다.

  • 를 작성setup.py파일(https://docs.python.org/2/distutils/setupscript.html) 은 프로젝트 폴더에 있습니다.
  • 을 활성화하고 위치로 이 합니다.pip install -e .
  • 그런 다음 iPython 노트북에 다음과 같이 입력합니다.

    %load_extautoreload

    %autoreload 1

    %프로젝트를 가져옵니다.기능들

    함수 가져오기에서 *

바로 그거야!

Linux/Windows/WSL 경로 형식 간의 호환성을 위해 adhg의 답변 외에도 Pathlib을 사용할 것을 권장합니다.

다음 폴더 구조를 가정합니다.

.
├── work
|   ├── notebook.ipynb
|   └── my_python_file.py
├── py
|   ├──modules
|   |    ├──__init__.py # empty
|   |    └──preparations.py
|   ├──__init__.py # empty
|   └── tools.py
├──.git
└── README.md

로드하는 방법tools.py또는preparations.pymy_python_file.py에)notebook.ipynb):

import sys
from pathlib import Path

# in jupyter (lab / notebook), based on notebook path
module_path = str(Path.cwd().parents[0] / "py")
# in standard python
module_path = str(Path.cwd(__file__).parents[0] / "py")

if module_path not in sys.path:
    sys.path.append(module_path)

from modules import preparations
import tools
...

운영 부서와 동일한 상황에 있는 자신을 발견했습니다. 여러 노트북을 만들 것이므로 다른 하위 폴더에 정리하고 싶습니다.

내가 필요로 하는 것을 하고 내게 더 깨끗해 보이는 이것을 시도했습니다.

import os
os.chdir(os.path.dirname(os.path.dirname(os.getcwd())))

는 두 된 두 단계입니다.os.path.dirname일 수 있음 (폴더구조다경하이나수상일있음우른)

방금 구현해서 잘 작동했고, btw 나는 주피터랩을 사용하고 있어요...함수가 있는 곳 위의 두 단계

주피터 노트북에서도 실행 마법을 사용할 수 있습니다.

%run -i "<filepath/functions.py>"

기본적으로 다음과 같은 방식으로 작동합니다.

from functions.py import *

언급URL : https://stackoverflow.com/questions/49264194/import-py-file-in-another-directory-in-jupyter-notebook

반응형