Python/Syntax 2021. 8. 24. 13:58

모듈과 패키지

모듈

  • 비슷한 성격의 변수, 함수들을 파일로 나눠서 정의하는 것이다.

  • 파일명이 모듈명이다.

  • 예제

    util.py

    INCH = 2.54
    
    def calcsum(n):
        total = 0
        for num in range(n + 1):
            total += num
        return total

    main.py

    import util
    # from util import * # 비권장 (이름 충돌 우려)
    
    print(util.INCH)
    print(util.calcsum(10))
    
    ''' stdout
    2.54
    55
    '''

모듈 테스트

  • __name__ 키워드는 모듈명으로 대체된다.

    • 단독 실행된 경우 : "__main__"

    • 모듈로 사용된 경우 : "모듈명"

    • 이는 모듈 개발 시 테스트하기 편하도록 지원하는 기능이다.

    # 모듈 정의
    
    if __name__ == "__main__" :
      # 모듈 테스트 코드

    util.py

    INCH = 2.54
    
    def calcsum(n):
        total = 0
        for num in range(n + 1):
            total += num
        return total
    
    # print("util.py", __name__) # 모듈명
    
    if __name__ == "__main__":
        print(f"1 inch = {INCH}")
        print(f"~10 = {calcsum(10)}")
    
    ''' stdout
    1 inch = 2.54
    ~10 = 55
    '''

모듈 경로

  • import 할 때 모듈을 찾는 순서는 다음과 같다.

    1. 워킹 디렉토리
    2. PYTHONPATH 환경변수에 등록된 디렉토리
    3. 표준 모듈 디렉토리
    4. 3rd 모듈 디렉토리
    import sys
    
    for path in sys.path:
        print(path)

패키지

  • 모듈들을 모아 놓은 디렉토리이다.

__init__

  • 반드시 __init__.py 파일이 존재해야 한다.

    • 일반적으로 내용은 없다.

    • from 패키지 import * 형식으로 패키지를 호출할 때, __init__.py__all__ 에 해당하는 리스트만 가져온다.

      • __all__ 을 지정하지 않으면 모든 모듈이 불러와진다.

      • 이렇게 패키지를 사용하는 것은 일반적이지 않지만, 관례적으로 패키지의 디렉토리에는 __init__.py 파일을 넣는다고 한다.

써드 파티 모듈

  • 모듈의 내부

    • 빌트인 모듈의 목록을 볼 수 있다.

      import sys
      
      print(sys.builtin_module_names)
      
      ''' stdout
      ('_abc',
      '_ast',
      '_codecs',
      '_collections',
      '_functools',
      '_imp',
      '_io',
      '_locale',
      '_operator',
      '_signal',
      :
      )
      '''
  • dir() 함수

    • 모듈내 함수 목록을 출력한다.

      import math
      
      print(dir(math))
      ''' stdout
      ['__doc__',
      '__file__',
      '__loader__',
      '__name__',
      '__package__',
      '__spec__',
      'acos',
      'acosh',
      'asin',
      :
      ]
      '''
  • help() 함수

    • 함수의 docstring 출력한다.

      help(math.hypot)
      
      ''' stdout
      Help on built-in function hypot in module math:
      
      hypot(x, y, /)
        Return the Euclidean distance, sqrt(x*x + y*y).
      '''
  • 외부 모듈 관리 pip

    명령어 설명
    install 패키지를 설치
    uninstall 설치한 패키지를 삭제한다.
    freeze 설치한 패키지의 목록을 보여준다.
    show 패키지의 정보를 보여준다.
    search pyPI에서 패키지를 검색한다.
  • beautifulsoup 예제

    from urllib import request
    import bs4
    
    target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")
    soup = bs4.BeautifulSoup(target)
    for city in soup.select("location"):
        name = city.select_one("city").string
        wf = city.select_one("wf").string
        tmn = city.select_one("tmn").string
        tmx = city.select_one("tmx").string
        print("%s : %s(%s ~ %s)"%(name, wf, tmn, tmx))

'Python > Syntax' 카테고리의 다른 글

파이썬 고급 문법  (0) 2021.08.24
파이썬 파일  (0) 2021.08.24
파이썬 예외 처리  (0) 2021.08.24
파이썬 표준 모듈  (0) 2021.08.24
파이썬 컬렉션 관리  (0) 2021.08.24