Machine Learning/Tensorflow

09. 모듈, 패키지 사용

728x90

01. 모듈과 패키지의 사용

- 파이썬 파일로 나타냄, 하나의 파이썬 파일안에는 많은수의 함수 class가 있을 수 있음.
- 
모듈: def로 선언된 함수, class들을 모아놓은것 
- 
개발자가 다양한 분야의 SW를 개발할 수 있도록 미리 파이썬 언어에서 지원하는 것을
  
내장 모듈(sys, os, random, 내장 전역 함수: ) print(), str(), list()...)이라고합니다.
- 
개발자는 자신이 필요한 모듈을 생성 할 수 있습니다.

- 
모듈은 import하여 사용합니다.
   import 
모듈이름                                ← 파이썬 파일명
   import 
패키지 이름.모듈 이름               ← 폴더.파이썬 파일명
   import 
이름이 긴 패키지.모듈명 as 별명 
   from 
모듈 이름 import 함수 이름          ← 하나의 함수만 가져옴
   from 
패키지 이름 import 모듈 이름       ← 패키지에서 파일을 가져옴.
   from 
패키지 이름.모듈 이름 import 함수 이름  ← 하나의 함수만 가져옴

- 
패키지: 모듈이 모이면 폴더가 생성되고 패키지라함.
  
일반 폴더와 구분하기위해 패키지는 폴더안에 '__init__.py' 파일을 생성하며
  version 1.0 
정도의 문자열을 내용으로 표시합니다.
  Python 3.3
부터는 '__init__.py' 파일 선언이 없어도 모든 폴더가 Package로 인식됩니다.

- 
하위 패키지의 생성은 계속적인 하위 폴더를 생성합니다.

- 
파이썬은 자바의 main 메소드가 있는 클래스 처럼 시작 파일이 지정되지 않음(JAVA: main 메소드).

1. 모듈의 선언

 /python/notebook/module/Lib.ipynb
   /python/notebook/module/Lib.py

- Jupyter Notebook: '/python/notebook/module' 폴더를 생성합니다
- PyCharm
에서는 '/python/notebook/module' 패키지를 생성합니다.
  (
프로젝트 선택 -> New -> Python Package)
- Jupyter Notebook
 'Lib.ipynb' 파일이 생성되어 import가 현재 지원이 안됨.
  
따라서 'Lib.py' 파일로 저장해서 사용해야함 ★.  

def absolute(su1):
    if su1 < 0:
        su1 = su1 * -1

    return su1

 /python/notebook/module/LibUse.ipynb

- '__name__' 시스템 변수는 현재 파이썬 파일이 import되는 모듈이 아니라
  
현재 파일에서 실행 되는 파일이면  '__main__' 값을 갖게됨,
  import
시 실행되면 모듈명이 출력됨.
  
)
  if __name__ == '__main__':  <- import
가 아닌 경우만 실행, 자체적인 실행

2. 하위 패키지 'tool' 안에 모듈의 선언

 /python/notebook/module/tool/Math.ipynb
    /python/notebook/module/tool/Math.py

def roundsu(su1):
    su1 = su1 + 0.5
    return str(int(su1))

def tot(*args): # 가변 인수, 전달받은 수의 합계
    tot = 0
    for su in args:
        tot = tot + su

    return tot

if __name__ == '__main__': # import 시에는 실행되지 않음.
    print(roundsu(10.4))
    print(roundsu(10.5))
    print(tot(10, 20, 30))

 

3. 하위 패키지 'tool'안에 모듈의 선언

 /python/notebook/module/tool/Utility.ipynb
    /python/notebook/module/tool/Utility.py

def maxsu(su1, su2):
    if su1 > su2:
        return su1
    else:
        return su2


def minsu(su1, su2):
    if su1 < su2:
        return su1
    else:
        return su2


def swap(su1, su2):
    temp = su1
    su1 = su2
    su2 = temp

    return su1, su2

 

4. import를 이용한 모듈의 사용

- import 선언시 실행시에 import되는 모듈이 자동으로 실행됩니다.
  
이 문제를 방지하기 위하여 if __name__ == '__main__': 코드를 이용하여
  
현재 참조 상태인지 아니면 main(Run, Start)으로 시작되는지를 구분하여 코드를 실행합니다.

- Lib.py, Math.py, Tool.py 
파일에 테스트 스크립트가 실행이 안되도록 아래 처럼 코드 추가
  
)
  if __name__ == '__main__':
      print(absolute(1000))
      print(absolute(-1000))

 /python/notebook/ModuleTest.ipynb 
파일 저장 폴더 'notebook'으로 지정, module안에 있으면 인식이안됨.