본문 바로가기
언어/PYTHON

[Python/초보를위한] 파이썬 패키지와 모듈 만들기, 임포트하는 방법(import, from import, import as)

by 만결숭이 2022. 6. 24.
반응형

모듈

: 이미 만들어져 있고 안정성이 검증된 함수들을 성격에 맞게 하나의 파이썬 파일에 묶어 만들어 놓은 것

  쉽게 말해서 함수들을 미리 만들어 한데 모아둔 것. 이 모듈을 가져와 쓰는 것을 모듈을 import한다고 말한다.

 

 

간단하게 모듈 만들고 import 해보기

1. mylib.py 에 add(), reverse() 두 가지 함수를 만듭니다.

짜쟌, mylib라는 모듈이 완성되었습니다!

a,b를 더해주는 add()함수와 x,y 순서를 바꾸어 리턴하는 reverse() 함수

 

2. mylib 모듈을 사용하기 위해 import 키워드를 씁니다.

모듈이름.함수이름

이와 같은 형태로 함수를 사용할 수 있습니다.

 

3.이제 모듈을 import하는 방법은 이해가 되었습니다 !

 


 

 

파이썬 패키지 직접 만들어보는 방법

1. mypackage라는 이름의 디렉토리를 생성합니다.

폴더 만들기

 

2. mypackge 디렉토리에 패키징 하고 싶은 모듈을 복사합니다.

저는 위에서 만든 mylib.py 모듈을 담았습니다.

네!
mypackage 안에 mylib.py 모듈이 담긴 모습.

 

3. mypackage 폴더에 version=1.0이 내용인 __init__.py 파일을 생성합니다.

 

4. 서브 디렉토리에 하위 패키지를 구성하고 싶다면, 1~3의 과정을 동일하게 반복하면 됩니다.

 

5. 이렇게 나만의 패키지가 생성됐습니다 !

사용하기 위해서는 소스코드 파일이 있는 디렉토리로 mypackage 디렉토리 전체를 가져오면 됩니다.

 

 


반응형

모듈을 import하는 방법

import 모듈이름
import 패키지이름.모듈이름

 

ex)

import time
import mylib
import mypackage.mylib

#모듈 함수 사용
time.sleep(5)		#파이썬 내장 모듈인 time의 sleep 함수, 5초간 정지한다.
mylib.add(10,20)
mypackage.mylib.reverse('H','L')

 

from ~ import

from 모듈이름 import 함수이름
from 패키지이름 import 모듈이름

하위패키지가 많을 경우, 쓰고싶은 함수가 포함된 계층구조를 모두 적어야하기 때문에

코드가 길어지고 뭣보다도 너무 귀찮습니다.

내가 쓸 모듈이나 함수의 경로를 모두 쓰지 않고 간단하게 호출하여 사용하는 방법이 있습니다.

from을 사용하여 임포트하는 것입니다.

 

ex)

from time import sleep
from mypackage import mylib
from mypackage.mylib import reverse

#모듈 함수 사용
sleep(5)
mylib.add(10,20)
reverse('H','L')	#3번 줄에서 reverse() 함수 자체를 호출했으므로 간단하게 함수명으로만 사용 가능

 

 

import ~ as

import 모듈이름 as 별명

계층구조가 복잡하거나 모듈이름이 길때 이 모듈에 별명을 붙여서 간단히 호출할 수도 있습니다.

 

ex)

import mypackage as mp
import mypackage.mylib as ml

#모듈 함수 사용
ret1 = mp.mylib.add(10,20)
ret2 = ml.reverse('H','L')

 

 

 

 

관련 오류

ImportError: No module named '모듈이름'

'모듈이름'이라는 모듈이 존재하지 않는데 import 했을 경우에 발생합니다.

 

AttributeError: module '패키지이름' has no attribute '모듈이름'

import 시 패키지이름까지만 적고, 모듈이름을 임포트하지 않았을 경우에 발생합니다.

예를 들어,

import mypackage

까지만 적었을 경우를 말합니다.

패키지는 모듈을 모아놓는 곳이므로

사용할 모듈의 이름까지 명시하고 그 안의 함수를 호출하여야 합니다. 

 

반응형

댓글