#파일 생성
%%writefile my_package/calc.py
__version__ = 1.0
def plus(num1, num2):
return num1 + num2
def minus(num1, num2):
return num1 - num2
def multiply(num1, num2):
return num1 * num2
독립적인 기능을 가지고 재사용 가능한 프로그램 단위를 모듈이라고 한다.
파이썬에서 모듈은 재사용 가능한 함수, 클래스등을 작성한 소스 파일을 말한다.
모듈의 함수나 클래스들을 다른 python 프로그램에서 호출 하여 사용할 수 있다.
이런 모듈들을 모아 놓으면 라이브러리가 된다.
모듈의 종류
모듈들을 모아 놓은 것을 패키지라고 한다.
물리적으로는 모듈 파일(.py)들을 모아놓은 디렉토리(폴더)가 패키지이다.
python 3.3 이전 버전은 package 디렉토리에 init.py 파일을 그 디렉토리에 반드시 위치시켜야 한다.
Root Package
파이썬 실행환경에 등록된 함수와 클래스만 호출해서 사용할 수 있다.
파이썬 모듈 파일에 정의된 변수, 함수, 클래스들을 사용하기 위해 파이썬 실행환경에 등록하는 작업을 말한다.
현재 프로그램 모듈의 것들이 아니라 다른 모듈에 있는 것들은 사용하기 위해 import 작업을 먼저
해야 한다.
모듈을 import 하면 모듈의 내용이 실행되면서 그 안에 구현된 변수, 함수, 클래스들이 파이썬 실행환경에 그 모듈 이름을 namespace로 하여 등록된다.
import 모듈 # 하나의 모듈 import.
import 모듈 as 별칭 # namespace의 이름을 모듈명이 아니라 별칭으로 지정한다.
import 모듈_1, 모듈_2 # 여러개 모듈 import.','를 구분자로 나열한다.
모듈을 import 하고 그 안에 함수, 클래스들을 사용할 때는 모듈명이 namespace 의 이름이 되므로 모듈명.함수(), 모듈명.Class 구문으로 호출한다.
별칭(Alias)를 주면 namespace의 이름으로 지정한 별칭을 사용한다.
import test_module
import my_module as mm
# test_module의 hello() 함수 호출시
test_module.hello()
# my_module은 mm 별칭을 지정했으므로 mm을 namespace로 사용한다.
p = mm.Person('홍길동', 30) # my_module의 Person 클래스 객체 생성
from 모듈 import 함수 # 함수/클래스가 있는 모듈과 함수를 분리해서 import한다.
from 모듈 import 클래스
from 모듈 import 함수_1, 함수_2, 클래스
from 모듈 import *
import 패키지명.모듈
from 패키지명 import 모듈
from 패키지명 import 모듈_1, 모듈_2
from 패키지명.모듈 import 함수
from 패키지명.모듈 import 클래스
from 패키지명.모듈 import 함수_1, 함수_2, 클래스
from Root패키지.Sub패키지1.Sub패키지2 import 모듈 # 패키지가 계층구조로 되있을 경우 `.` 으로 이용해 나열한다.
from Root패키지.Sub패키지1.Sub패키지2.모듈 import 함수
from Root패키지.Sub패키지1.Sub패키지2.모듈 import 클래스
#my_module.py def greet(name): print(f"{name}님 안녕하세요") def get_greet(name): return f"{name}님 안녕하세요" class Hello: def __init__(self, name): self.name = name def eng_greet(self): return f"Hello {self.name}." def kor_greet(self): return f"안녕하세요 {self.name}님." print(__name__) if __name__ == "__main__": greet("홍길동") t = get_greet("이순신") print(t)
# my_module.py 의 함수, 클래스들을 사용. ## my_module을 import (모듈 import) import my_module # my_module의 함수/클래스를 사용 ## 모듈명.함수() my_module.greet("홍길동") txt = my_module.get_greet("이순신") print(txt)홍길동님 안녕하세요
이순신님 안녕하세요h = my_module.Hello("유관순") print(h.eng_greet())Hello 유관순.
## import 할때 모듈에 별칭을 지정. # 별칭 -> namespace 이름을 명시. import my_module as mm mm.greet("홍길동")홍길동님 안녕하세요
# my_module.greet("aaa") def greet(): print('greet') greet()greet
### 모듈안의 개별 함수나 클래스를 import from my_module import greet from my_module import greet, Hello greet("이순신") h = Hello("이름") h.kor_greet()이순신님 안녕하세요
'안녕하세요 이름님.from my_module import * # my_module 모든 것들을 다 import 해서 현재 실행모듈 영역에 저장. greet("aaa") get_greet("aaa") h = Hello("aaa")aaa님 안녕하세요
# 패키지 안의 모듈을 import ## import 패키지명.모듈명 import my_package.calc my_package.calc.plus(10, 20)30
import my_package.calc as c c.minus(20, 10)10
## from 패키지 import 모듈 from my_package import calc calc.multiply(100, 5)500
from my_package import calc as c c.plus(1, 2)3
from my_package.calc import plus, minus plus(1, 2), minus(1, 2)(3, -1)
# from 경로 import import할것(모듈, 모듈안의 클래스,함수) import random random.randint(10, 111)81
from random import randint randint(100, 200)198
%%writefile c:\temp\hello_module.py def hello(): print(r"c:\temp\hello_module.py 입니다.")Writing c:\temp\hello_module.py
import 된 모듈 찾는 경로 및 PYTHONPATH
import 모듈 구문을 사용하면 파이썬 실행 환경은 모듈을 다음 경로에서 찾는다.
현재 실행중인 모듈(import 구문을 사용한 모듈)이 있는 경로
파이썬 실행환경에 등록된 경로
모듈을 찾는 순서는 다음에서 확인할 수 있다.
import sys # 표준모듈 sys
print(sys.path) # 모듈을 찾는 경로를 저장한 list
위의 경로 이외에 파이썬 모듈이 있을 경우 PYTHONPATH 환경변수에 그 디렉토리 경로를 등록한다.
sys.path 에 추가한다. (사용할 때 마다 추가해야 한다.)
운영체제 환경변수에 등록한다. (한번만 하면된다.)
import 모듈 구문을 사용하면 파이썬 실행 환경은 모듈을 다음 경로에서 찾는다.
1. 현재 실행중인 모듈(import 구문을 사용한 모듈)이 있는 경로
2. 파이썬 실행환경에 등록된 경로
모듈을 찾는 순서는 다음에서 확인할 수 있다.
import sys # 표준모듈 sys
print(sys.path) # 모듈을 찾는 경로를 저장한 list
위의 경로 이외에 파이썬 모듈이 있을 경우 PYTHONPATH 환경변수에 그 디렉토리 경로를 등록한다.
1. sys.path 에 추가한다. (사용할 때 마다 추가해야 한다.)
2. 운영체제 환경변수에 등록한다. (한번만 하면된다.)
import sys from pprint import pprint # 자료구조들을 보기좋게 출력하는 print함수. pprint(sys.path) #import 할 때 모듈을 찾는 경로들.['C:\Users\USER\AppData\Local\Programs\Python\Python311\python311.zip',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\DLLs',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib',
'C:\Users\USER\AppData\Local\Programs\Python\Python311',
'',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\lib',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\Pythonwin']#파이썬 라이브러리가 있는 경로를 sys.path(리스트) 에 추가하면 import 가능해짐. sys.path.append(r"C:\temp") pprint(sys.path)['C:\Users\USER\AppData\Local\Programs\Python\Python311\python311.zip',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\DLLs',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib',
'C:\Users\USER\AppData\Local\Programs\Python\Python311',
'',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\win32\lib',
'C:\Users\USER\AppData\Local\Programs\Python\Python311\Lib\site-packages\Pythonwin',
'C:\temp']import hello_module as hm hm.hello()c:\temp\hello_module.py 입니다.
import os os.getcwd() # 현재 작업 디렉토리 조회.'C:\Classes\DA-35\01_Python'
메인 모듈
하위 모듈 (Sub module)
name 내장 전역변수
if __name__ == '__main__':
# 메인모듈일 때만 실행할 코드 블록
기능을 모아 놓은 것이 모듈(module) 이고 모듈을 모아 놓은 것이 패키지 이고 그런 패키지들을 모아서 놓은 것이 Library 이다.
Library 는 범용적으로 사용할 수있는 기능들을 구현해서 배포한 것을 말한다. 파이썬에서는 라이브러리를 패키지라고도 한다.
Library는 누구든 만들어서 배포(제공)할 수있다.
Python은 3rd party library 생태계가 잘 이루어져 있다.