Record

개념

-

주요 명령어

프로젝트 디렉토리 생성

$ 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