python/기본

Module Import

wefree 2022. 4. 30. 20:06

문제

my_project/
├── main.py
└── my_pkg
    ├── __init__.py
    ├── util_a
    │   ├── __init__.py
    │   └── a.py
    └── util_b
        ├── __init__.py
        └── b.py

python 프로젝트가 위와 같이 구성되어 있을 때, 디렉토리 하위에 __init__.py 파일이 있으면 모듈로 인식한다.

b.py 에서 a.py 를 참조하는 예제를 만들어 보자

 

코드

a.py

def a_echo():
    print('AAA')

 

b.py

# from ..util_a import a
from my_pkg.util_a import a


def b_echo():
    a.a_echo()
    print('BBB')

from ..util_a import a 처럼 사용할 수도 있지만 자주 사용하지는 않는다?

 

main.py

from my_pkg.util_b import b

b.b_echo()

 

설명

main.py 를 아래처럼 수정 하면 에러가 난다.

from my_pkg.util_b import *

b.b_echo()

위의 코드를 문제 없이 동작하게 하려면  my_pkg/util_b/__init__.py 에 아래 내용을 추가한다.

__all__ = ['b']

이제 util_b 하위에 'b' 가 있는 것을 안내해 주고 있기 때문에 main.py 는 문제 없이 동작한다. 

 

module 을 찾는 경로는 아래처럼 확인할 수 있다.

import sys

print(sys.modules['os'])

print(sys.path)
sys.path.append('/opt')

# export PYTHONPATH=/foo:/bar

 

intellij 에서 Module 인식

File > Project Structure 메뉴의 Modules 항목에서 my_project 를 모듈로 등록한다.