파이썬 3
모듈
모듈은 여러가지 기능을 정리해 둔 파이썬 파일을 말한다.
import 파일이름
파일이름.메소드
import area
print(area.circle(3))
모듈 전체를 임포트 한다.
from 파일이름 import 메소드이름
from area import circle
print(circle(3))
모듈에서 선택한 메소드만 임포트 한다.
사용할 때 메소드 이름 만 작성하면 된다.
import 파일이름 as 바꿀이름
import area as a
print(a.circle(3))
from area import circle as a
print(a(3))
as를 사용해 이름을 대체할 수 있다.
네임스페이스
네임스페이스는 파일에서 정의된 모든 이름을 말한다.
dir함수는 네임스페이스를 리턴해 준다.
from area import circle, square
def square(length):
return 4 * length
print(square(3))
print(dir())
위와 같이 square메소드를 임포트하고 square메소드를 또 정의해서 똑같은 이름의 함수가 있으면 가장 나중에 정의된 것을 쓴다.
한 네임스페이스 안에서는 같은 이름을 쓰지 않는 것이 좋다.
이름이 겹친다면 임포트하는 메소드를 as를 사용해 이름을 바꾸거나 모듈 그대로 불러와서 사용하면 된다.
스탠다드 라이브러리
파이썬을 설치할 때 포함되며 기본적이 기능들이 들어있다.
- int, float 같은 자료형
- 내장 함수
- 모듈
모듈 검색 경로
파이썬은 임포트하는 모듈을 찾을때 특정 경로들을 탐색한다.
import sys
print(sys.path)
sys모듈에는 파이썬에 실행환경과 관련된 변수들과 함수들이 저장되어 있다.
site-packages에 외부 패키지들이 일반적으로 저장된다.
sys.path에 경로 추가
import sys
sys.path.append('C:\\Users\\....')
print(sys.path)
append를 하고 프로그램이 종료되면 그 경로는 sys.path에서 사라진다.
영구적으로 sys.path에 추가하려면
파이참에서 File -> Settings -> Project -> Python Interpreter -> 화살표 show all -> 맨 오른쪽 경로 추가 아이콘 -> + 아이콘
에서 경로를 추가하면 된다.
import sys
print(sys.path)
이제 append를 해주지 않아도 경로가 추가되어 있는것을 볼 수 있다.
스크립트, 모듈
스크립트는 프로그램을 작동시키는 코드를 담은 실행 용도의 파일을 말한다.
모듈은 프로그램에 필요한 변수들이나 함수들을 정의해 놓은 파일을 말한다.
직접 실행하는 파일이 스크립트가 되는 것이므로 모듈에 테스트 코드 같은 것을 써서 스크립트로 만들 수도 있다.
def square(length):
return length * length
print(square(5) == 25)
이렇게 스크립트로 사용할 수도 있지만 모듈로써 임포트를 하게 되면 테스트 코드가 함께 실행이 돼버린다. 모듈을 임포트하면 모듈 안의 코드가 모두 실행되기 때문이다.
이럴때는 __name__을 쓰면 된다.
__name__은 모듈의 이름을 저장해 놓은 변수이다.
직접 실행하면 __name__은 __main__으로 설정되고
임포트하면 __name__은 모듈이름으로 설정된다.
그래서 모듈에 if __name__ == ‘__main__’ 를 작성하고 if문 안에 테스트 코드를 작성하면 파일을 스크립트로써 직접 실행할 때는 테스트 코드가 출력되고 모듈로써 사용할 때는 출력되지 않게된다.
def square(length):
return length * length
if __name__ == '__main__':
print(square(5) == 25)
파이썬은 모든 파일을 실행할 수 있지만 자바나 C같은 언어에서는 파일을 실행하기 보다는 main()함수를 실행한다. 파이썬에서도 이런 패턴을 사용할 수 있으며 코드의 가독성이 올라가므로 아래와 같이 사용하면 좋다.
def square(length):
return length * length
def main():
print(square(5) == 25)
if __name__ == '__main__':
main()
패키지
모듈들을 한 묶음으로 묶어 놓은 것을 패키지라 한다.
패키지를 만들 때는 폴더를 만들고 __init__.py란 파일을 넣어둬야 한다.
그리고 모듈들을 넣으면 된다.
shapes란 패키지에 area.py안에 메소드들이 있으면
import shapes.area
print(shapes.area.circle(3))
from shapes import area
print(area.circle(2))
import shapes.area as a
print(a.circle(3))
from shapes.area import circle
print(circle(3))
이런식으로 불러올 수 있다.
하지만 아래의 방식은 되지 않는데 파이썬에서 패키지를 임포트 하면 패키지 안의 내용들은 함께 임포트가 되지 않는다.
import shapes
print(shapes.area.circle(3))
이럴때는 __init__파일을 사용해 주면 된다.
__init__
init파일은 이 폴더가 패키지임을 알려준다.
파이썬 3.3ver 이후부터는 init파일이 필수가 아니지만 호환성과 패키지의 명확성을 위해 만들어 두는 것이 좋다.
패키지나 그 안의 것을 임포트하면 가장 먼저 실행된다.
init파일 안에 from shapes import area를 해주면 위에서 생겼던 문제를 해결할 수 있다.
init파일 안에 from shapes.area import circle을 해주면
import shapes
print(shapes.circle(2))
이렇게 사용할 수도 있다.
init파일에 변수를 정의하고 필요한 곳에서 임포트해서 사용할 수도 있다.
__all__
임포트를 할때 *를 패키지에 적용을 하면 아무것도 임포트되지 않는다.
from shapes import *
이럴 때 init파일에 __all__을 사용하면 된다.
__all__ = [‘area’] 같이 작성하면 import *을 사용해서 패키지를 임포트 할 때 어떤 모듈을 가져올지 정해준다.
모듈에도 마찬가지로 작성해서 스크립트에서 import *를 했을 때 어떤 것을 가져올지 정해줄 수 있다.
이렇게 import *를 사용하면 어떤것을 임포트하는지 한번에 확인하기 어려우니 프로그램에서 정의되는 이름들같이 네임스페이스를 완벽히 이해할 때만 쓰고 아닐 땐 필요한 것들만 지정해서 임포트하고 *는 자제하는게 좋다.
서브패키지
패키지 안에 또 다른 패키지가 있을 수 있다.
임포트 방식은 기존의 것과 다르지 않다.
상대경로 임포트
현재 위치를 나타내는 ‘.’을 사용하면 된다.
from . import area
from .area import circle
’..’은 상위 경로로 이동한다.
상대경로가 복잡해지면 가독성이 떨어지므로 그럴 땐 절대경로를 사용한다.
외부 패키지
개발자들이 미리 만들어둔 패키지를 말한다.
공식 패키지 저장소인 PyPI에서 다운받을 수 있다.
PIP
PIP은 PyPI에서 패키지를 다운받아 설치해주는 패키지 관리도구다.
지우거나 업그레이드할 때도 사용한다.
파이참에서 설치
File -> Settings -> Project -> Python Interpreter -> + 아이콘 -> 검색 -> install
프로젝트마다 따로 설치되며 컴퓨터 공용이 아니다.
cmd에서 설치
- 설치
pip install 이름 - 삭제
pip uninstall 이름 - 버전 선택 설치
pip install 이름 == 버전 - 리스트
pip list
Leave a comment