본문 바로가기
Python/개념

Day 8-1. 파이썬 모듈

by 사라리24 2024. 3. 20.
SMALL

1. 모듈

파이썬에서 모듈을 만들려면 간단히 .py 확장자를 가진 파일에 코드를 작성하면 됩니다. 모듈은 단순한 함수 뿐만 아니라 변수, 클래스 등도 포함할 수 있으며, 다른 스크립트에서 import 구문을 사용하여 가져올 수 있습니다.

 

 

1. 아래 코드를 작성하여 math_tools.py 로 저장합니다.

 
  
  # 변수
  PI = 3.141592653589793

  # 함수
  def add(a, b):
      return a + b

  def subtract(a, b):
      return a - b

  # 클래스
  class Circle:
      def __init__(self, radius):
          self.radius = radius
  
      def area(self):
          return PI * self.radius * self.radius
 
 

 

03.141592653589793
8
2
78.53981633974483

 

2. 위에서 작성한 math_tools.py를 import 해서 사용합니다.

 
  import math_tools

  # 모듈 내의 변수 사용
  print(math_tools.PI)  

  # 모듈 내의 함수 사용
  print(math_tools.add(5, 3)) 
  print(math_tools.subtract(5, 3))  

  # 모듈 내의 클래스 사용
  circle = math_tools.Circle(5)
  print(circle.area())  
 
 
3.141592653589793
8
2
78.53981633974483

 

 
 # 필요한 속성, 클래스만 가져오기
 
  from math_tools import PI, Circle

  print(PI)  
  circle = Circle(5)
  print(circle.area()) 
 
 
3.141592653589793
78.53981633974483

 

  
  # 모듈을 별명으로 이용해서 사용하기
  import math_tools as mt

  # 모듈 내의 변수 사용
  print(mt.PI)  

  # 모듈 내의 함수 사용
  print(mt.add(5, 3)) 
  print(mt.subtract(5, 3)) 

  # 모듈 내의 클래스 사용
  circle = mt.Circle(5)
  print(circle.area())  
 
 
3.141592653589793
8
2
78.53981633974483

 

모듈을 가져오려면 가져오는 스크립트와 모듈이 동일한 디렉터리에 있어야 합니다. 

아니면, 모듈을 시스템 경로에 추가하거나, PYTHONPATH 환경 변수를 설정해야 합니다.

모듈의 이름은 파이썬의 키워드와 충돌하면 안 됩니다. 

예를 들어, import.py 라는 모듈을 만들면 import 키워드와 충돌하기 때문에 잘못된 이름입니다.

 

 

 

2. 구글 드라이브 사용하기

먼저 구글드라이브를 마운트하고 아래와 같이 실행합니다.

 

ㄴ 복숭아 클릭해서 Google Drive 연결하고 경로 연결하세요!

  
  path ='/content/drive/MyDrive/1. KDT/moduls/'
 
  import sys
  sys.path.append(path)
 

 

※ __name__ 속성 사용하기

모듈에는 __name__이라는 특별한 내장 변수가 있습니다. 이 변수는 모듈이 어떻게 실행되는지에 따라 다른 값을 가집니다. 모듈이 파이썬 인터프리터에 의해 첫 번째로 실행되면, __name__은 '__main__'으로 설정됩니다. 그러나 외부에서 import되면, __name__은 원래의 모듈 이름으로 설정됩니다.

 

1. 아래 코드를 math_tools.py 에 추가합니다.

 
  if __name__ == "__main__":
      print("이 모듈은 직접 실행되었습니다.")
  else:
      print("이 모듈은 import 되었습니다.")
 
이 모듈은 직접 실행되었습니다.

 

math_tools.py를 직접 실행하면 "이 모듈은 직접 실행되었습니다."가 출력되고, 다른 파일을 통해 실행하면 "이 모듈은 import 되었습니다."가 출력됩니다.

이 기능을 활용하면 모듈에 테스트 코드를 추가할 수 있습니다. 모듈이 직접 실행될 때만 테스트 코드가 실행되게 하면, 다른 스크립트에서 모듈을 가져올 때는 테스트 코드가 실행되지 않습니다.

 

3. 패키지

  파이썬에서 패키지는 모듈들을 포함하고 있는 디렉터리입니다모듈은 파이썬 코드를 담고 있는 파일이며여러 모듈을 논리적으로 그룹화하려는 경우 패키지를 사용합니다패키지를 사용하면 관련된 기능들을 함께 묶어서 코드를 더욱 체계적으로 관리할  있습니다.

 

  
  my_package/
  │
  ├── __init__.py
  │
  ├── module_a.py
  │
  └── sub_package/
      │
      ├── __init__.py
      └── module_b.py
 
a

 

디렉터리와 파일로 구성: 패키지는 기본적으로 디렉터리와 그 안의 .py 파일들로 구성됩니다.

__init__.py 파일: 패키지를 구성하는 디렉터리 내에는 __init__.py라는 특별한 파일이 있어야 합니다. 이 파일은 해당 디렉터리가 파이썬 패키지임을 나타냅니다. __init__.py는 비워둘 수도 있고, 패키지 초기화 코드를 포함할 수도 있습니다.

계층적 구조: 패키지 안에 또 다른 패키지(하위 패키지)를 포함할 수 있습니다. 이를 통해 복잡한 프로젝트의 코드를 여러 레벨의 디렉터리로 계층적으로 구성할 수 있습니다.

  
 
  from my_package import module_a
  from my_package.sub_package import module_b
 
 

ㄴ앞으로 파이참에서 실행해볼 것임

 

4. 패키지 만들기 실습

 

 

1. 디렉토리 구조 설정

  
 
  shapes/
  │
  ├── __init__.py
  ├── circle.py
  └── rectangle.py
 
 
 

 

2. circle.py 만들기

  
  PI = 3.141592653589793

  def area(radius):
      return PI * radius * radius

  def circumference(radius):
      return 2 * PI * radius
 
 

 

3. rectangle.py 만들기

 
  def area(width, height):
      return width * height

  def perimeter(width, height):
      return 2 * (width + height)
 
 
 

 

4. rectangle.py 만들기

 
 
  from shapes import circle, rectangle

  # circle 모듈의 함수 사용
  print(circle.area(5))  # 원의 면적
  print(circle.circumference(5))  # 원의 둘레

  # rectangle 모듈의 함수 사용
  print(rectangle.area(4, 6))  # 직사각형의 면적
  print(rectangle.perimeter(4, 6))  # 직사각형의 둘레
 
 
 
  from shapes.circle import area as circle_area
  from shapes.rectangle import area as rectangle_area

  print(circle_area(5))  # 원의 면적
  print(rectangle_area(4, 6))  # 직사각형의 면적
 

 

※ __init__.py 의 역할

 

기본적으로 패키지의 초기화 코드를 포함할 수 있습니다. 예를 들어, 패키지가 import 될 때 특정 변수를 설정하거나 다른 초기화 작업을 수행하려면 __init__.py 파일에 해당 코드를 작성합니다.

또한, __init__.py 파일을 사용하여 패키지 레벨에서의 import를 제어할 수 있습니다. 예를 들어, from shapes import *를 했을 때 어떤 모듈이 import 될지 정의할 수 있습니다.

 

 
  # shapes/__init__.py

  __all__ = ["circle", "rectangle"]
 

 

 설정은 from shapes import * 사용할  circle rectangle 모듈만 가져온다는 것을 의미합니다.

'Python > 개념' 카테고리의 다른 글

Day 9-1. 변수 타입 어노테이션  (0) 2024.03.21
Day 8-2. 파일 입출력  (0) 2024.03.20
Day 7. 과제_주민번호 유효성 검사  (0) 2024.03.20
Day 6. 과제_가위바위보  (0) 2024.03.18
Day 7-3. 파이썬의 예외처리  (0) 2024.03.18