[비망]자작 모듈 import시의 Path 취득(Jupyter계도 포함)

내용



보통 쓰는 방법도 잊을 것 같아서
  • 일반 쓰기 (비망)
  • jupyter 특유의 쓰기 (비망)
  • import에서 __init__.py (초보자용)

  • 일반 쓰기



    C라면 컴파일시에 include하는 헤더 파일이라든지 직접 상대 Path라든지로 지정할 수 있었던 생각이 듭니다만,
    파이썬에서는 다음과 같이 작성해야하는 것 같습니다.
    import sys, pathlib
    # currentの親ディレクトリのパスを取得
    current_dir = pathlib.Path(__file__).resolve().parent
    # モジュールのあるパスをsys.pathにappendして通す,今回目的のmodule群のディレクトリは一個上の階層にあるので/../
    sys.path.append(str(current_dir) + '/../')
    # 今回の目的のモジュール群とその関数を__init__.pyでsignalfuncディレクトリ内モジュール群とその関数全てimportしている
    from signal_func import *
    from exec_func import *
    

    jupyter 시스템에서 쓰는 법



    보통 쓰는 법이라면 NameError: name '__file__' is not defined 라고 화내므로 다음과 같이 써 씁니다.
    import sys, os
    from pathlib import Path
    # signalfuncなどのある親ディレクトリのパスを取得,これはJupyter系特有の書き方
    current_dir = os.path.join(Path().resolve())
    # モジュールのあるパスを追加
    sys.path.append(str(current_dir) + '/../')
    from signal_func import *
    from exec_func import *
    

    import에서의 __init__.py


    __init__.py 에는 여러가지 역할이 있습니다만 모듈의 import에 있어서는 편리한 역할을 가지고 있습니다.
    예를 들어, 이번 signal_func 디렉토리 내에는 다음과 같은 대량의 모듈 파일을 가지고 있어 각각 다양한 함수를 내포하고 있습니다.



    import에서 __init__.py는 해당 디렉토리가 import될 때 실행되는 파일입니다.
    from signal_func import * 를 한 시점에서 signal_func 디렉토리내의 __init__.py 가 실행되어 각 분석 모듈(bband.py라든지)에 내포된 모든 함수(bband_buy_func(),bband_sell_func()라든지)를 *로 import해 그대로 호출할 수 있도록 하고 있다는 것이 됩니다.

    실제로 jupyter에서 import한 signál_func를 실행하면 ...


    pathlib로 취득해 sys에 추가(통한)한 path처의 signal_func 디렉토리의 __init__.py를 모듈로서 불리고 있습니다.

    좋은 웹페이지 즐겨찾기