[Python] 같은 이름을 가진 root 패키지의 하위 모듈/패키지 접근 Develop Tip

어느 폴더에 다음과 같은 파이썬 구조가 있다 가정합니다.

.
├── X
│   └── a
│       ├── __init__.py
│       └── b.py
└── Y
    └── a
        ├── __init__.py
        └── c.py


__init__.py 는 모두 비어있는 상태이고

b.py 의 내용은
print('in a.b.py')

c.py 의 내용은
print('in a.c.py')

와 같이 있습니다.

그런데 필요에 따라 접근하기 위하여
위의 b.py, c.py 를 모두 사용하려고 합니다.

$ PYTHONPATH=./X:./Y python
라고 명령을 내리고,

>>> import a.b
in a.b.py


라고 잘 나옵니다.

이제,

>>> import a.c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'a.c'


라고 오류를 발생하는 것이었습니다.

둘 중에 하나밖에 못 가져오는 군요..

그럼 처음부터 위와 같이 같은 이름으로 시작되는 것이 어딘가에 있다면...

이름을 달리 만들 수도 있지만, 필요에 따라 만들 경우도 있습니다.
예를 들어, vivans.util 이라는 것을 라이브러리로 만들어,
다른 프로그램에서는 vivans.rest 라고 만들어 사용할 경우가 허다하기 때문입니다.

결국 해결 방법은,
pkgutil 표준 라이브러리에 exten_path 에 있었네요.

위의 각 모듈의 __init__.py 에

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


를 넣어주고 다시 위의 테스트를 하면 에러 없이 잘 수행되었습니다.


어느 분께는 도움이 되셨기를...


덧글

댓글 입력 영역

구글애드텍스트