아직 익숙한 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
Pingback: [python] 기본 개발 환경 구성 - Seed's Tale