python 패키지 간단 예제

아직 익숙한 C 코딩을 벗어나지 못한터라 뭔가 function이나 module별로 디렉토리를 나눠야 할 것 같은 강박에 시달린다. python 프로젝트 디렉토리도 그런 구조로 만들어야 할 것 같은데 프로젝트 디렉토리를 관리하는 게 저마다 조금씩 다른 것 같아 아직은 혼란스럽다.

몇몇 자료를 찾아본 결과로 다음과 같은 간단한 구조를 만들어 보았다.

프로젝트 디렉토리 생성

$ mkdir pack
$ cd pack

가상환경 생성

$ python3 -m venv venv
$ source venv/bin/activate

패키지 디렉토리 생성

$ mkdir mypack
$ touch mypack/__init__.py

서브패키지 디렉토리 생성

$ mkdir mypack/pack_a
$ mkdir mypack/pack_b
$ touch mypack/pack_a/__init__.py
$ touch mypack/pack_b/__init__.py

pack_a에 module_a 생성

$ vi mypack/pack_a/module_a.py

module_a.py

def mod_echo_a():
        print("This is module echo A")

pack_b에 module_b 생성

$ vi mypack/pack_b/module_b.py

module_b.py

def mod_echo_b():
        print("This is module echo B")

test 디렉토리 생성

$ mkdir mypack/test

test에 test.py 생성

$ vi mypack/test/test.py

test.py

from mypack.pack_a import module_a
from mypack.pack_b import module_b

def test():
        module_a.mod_echo_a()
        module_b.mod_echo_b()

if __name__ == '__main__':
        test()

위 작업을 순서대로 따라했다면 다음과 같은 디렉토리 구조가 만들어졌을 것이다.

.
├── mypack
│   ├── __init__.py
│   ├── pack_a
│   │   ├── __init__.py
│   │   └── module_a.py
│   ├── pack_b
│   │   ├── __init__.py
│   │   └── module_b.py
│   └── test
│       └── test.py
└── venv

이 상태에서 test.py를 실행시키면 다음과 같은 오류가 발생한다.

$ python mypack/test/test.py
Traceback (most recent call last):
  File "mypack/test/test.py", line 1, in <module>
    from mypack.pack_a import module_a
ImportError: No module named 'mypack'

setup.py 생성

$ vi setup.py

setup.py

from setuptools import setup, find_packages

setup(name='mypack', version='1.0', packages=find_packages())

pip install 실행

$ pip install -e .

실행 결과는 다음과 같다.

$ pip install -e .
Obtaining file:///home/nvidia/dev/pack
Installing collected packages: mypack
  Running setup.py develop for mypack
Successfully installed mypack-1.0

세팅이 완료 된 후 test.py를 실행한 결과는 다음과 같다.

$ python mypack/test/test.py
This is module echo A
This is module echo B

참고

This Post Has One Comment

Leave a Reply