본문 바로가기
Programming/Python

Package

by 용스토리랜드 2023. 3. 22.

모듈은 스크립트 파일이 한 개지만 패키지는 폴더(디렉터리)로 구성되어 있다. 

 

__init__.py 파일 : 해당 폴더는 패키지로 인식된다. 그리고 기본적으로 __init__.py 파일의 내용은 아무것도 채워넣지 않아도 된다.(python 3.3 v 이상부터는 __init__.py 파일이 없어도 패키지로 인식됨.) 하지만 하위 버전에도 호환되도록 __init__.py 파일을 작성하는 것을 권장.

 

# 패키지에 모듈 만들기

# 패키지 사용하기 

  • import 패키지.모듈
  • 패키지.모듈.변수
  • 패키지.모듈.함수() 
  • 패키지.모듈.클래스()

main.py 파일은 calcpkg 패키지 폴더 안에 넣으면 안된다. 

clacpkg 안에 있는 operation, geometry 모듈에서 함수를 호출하였습니다.

 

# from import 로 패키지의 모듈에서 변수, 함수, 클래스 가져오기

  • from 패키지.모듈 import 변수
  • from 패키지.모듈 import 함수
  • from 패키지.모듈 import 클래스
>>> from calcpkg.operation import add, mul
>>> add(10, 20)
30
>>> mul(10, 20)
200

https://dojang.io/mod/page/view.php?id=2449

참고|패키지의 모듈과 __name__ 

패키지의 모듈에서는 __name__ 변수에 패키지.모듈 형식으로 이름이 들어갑니다. 즉, calcpkg 패키지의 geometry.py 에서 __name__ 의 값을 출력하도록 만들고, import 로 가져오면 'calcpkg.geometry' 가 나온다.

 

참고|모듈과 패키지를 찾는 경로 

import sys
print(sys.path) # sys.path 는 파이썬 모듈들이 저장되어 있는 위치를 나타냄

# ['C:\\Users\\user\\project\\coding\\module_package', 'C:\\Users\\user\\anaconda3\\envs\\lf\\python38.zip', 'C:\\Users\\user\\anaconda3\\envs\\lf\\DLLs', 'C:\\Users\\user\\anaconda3\\envs\\lf\\lib', 'C:\\Users\\user\\anaconda3\\envs\\lf', 'C:\\Users\\user\\anaconda3\\envs\\lf\\lib\\site-packages', 'C:\\Users\\user\\anaconda3\\envs\\lf\\lib\\site-packages\\win32', 'C:\\Users\\user\\anaconda3\\envs\\lf\\lib\\site-packages\\win32\\lib', 'C:\\Users\\user\\anaconda3\\envs\\lf\\lib\\site-packages\\Pythonwin']

지금까지 모듈과 패키지는 현재 폴더(디렉터리) 에 만들었다. 파이썬에서는 현재 폴더에 모듈, 패키지 가 없으면 다음 경로에서 모듈, 패키지를 찾는다. 

 

sys 모듈의 path 변수에는 모듈, 패키지 를 찾는 경로가 들어있다. 여기서 site-packages 폴더에는 pip 로 설치한 패키지가 들어간다. 그리고 자신이 만든 모듈, 패키지도 site-packages 폴더에 넣으면 스크립트 파일이 어디에 있든 모듈, 패키지를 사용할 수 있다.  

만약 가상 환경 (virtual environment) 를 만들어서 모듈과  패키지를 관리한다면 가상환경/Lib/site-packages 폴더에 모듈과 패키지가 들어간다.

반응형

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

[프로그래머스 Python] 자릿수 더하기  (0) 2024.06.26
[python] time  (0) 2023.03.30
Module  (0) 2023.03.22
[list] python list random 추출  (0) 2023.03.17
[Error] Attribute Error  (0) 2023.03.16