1 모듈
- 모듈: 이미 만들어진 기능 들고 와서 쓰기. 특정 기능을 가진 파이썬 파일.
1-1 모듈 만들기
- .py 확장자로 만들어야 한다.
- 만약 .ipynb 확장자의 경우 수정 방법.
- 프롬프트에 주소 디렉토리 옮겨서 아래처럼 이용.
jupyter nbconvert __to script 제목.ipynb
- 매직커맨드 이용: 코드 작성 중 하나의 셀을 파이썬 파일로 저장
%%write file 제목.py
1-2 모듈 불러오기
- 단일 모듈:
import 모듈명
- 이후에 모듈 함수, 상수를 이용할 때는
모듈명.함수명 모듈명.상수명
- 모듈 별칭 지정:
import 모듈명 as 별칭
- 모듈 특정 함수나 변수만:
from 모듈명 import 함수, 상수, 클래스 등
- 모듈 모든 요소 들고오기:
from 모듈명 import *
1-3 __name__
- 현재 실행 중인 파일을 지정하는, 파이썬 기본 제공 변수.
- __name__ == 모듈이름 으로 저장되어 있다. 하지만 여기서 실행 파일은 '__main__'이 저장된다.
- 이를 통해 실행 파일을 구분 가능. 인터프리터가 main인 파일을 찾아가서 그것부터 실행하는 거다.
print(f'__name__: {__name__}')을 모듈 파일 맨 밑에 넣어두면,
모듈 실행할 때 그 모듈 파일 자체를 실행하면 print(f'__name__: {__main__}')이, 다른 파일에서 import한 경우엔 print(f'__name__: {파일명}')
- 따라서
if __name__ == '__main__'을 하면, 그 모듈 파일 자체로 실행할 때만 실행되는 부분을 만들 수 있다.
1-4 다른 디렉터리에 있는 모듈 불러오기
- 실행 파일과 동일한 디렉토리에 있는 것은 원래 사용 가능
- pycharm 내 컴퓨터 작업 기준: C:/pythonEx/project/pythonProject/venv/lib/site-packages 에 넣으면 이 프로젝트 어디든 쓸 수 있는 범용성 모듈 됨
- ven v: 가상 환경(virtual environment). 가산 환경을 하나 만들고 작업을 하면 독립적으로 환경 세팅이 가능하기 때문에, 프로젝트별로 운영되는 것.
- spyder에서, 환경설정으로 원하는 폴더 추가
- 파이썬 셸에서(anaconda 등) sys 이용
python
import sys
sys.path => 현재 라이브러리 설치된 디렉터리 목록 보여주고, 여기 있는 모듈들은 그냥 사용 가능
sys.path.append('경로') => 지정한 디렉터리 추가
- 파이썬 셸에서 PYTHONPATH 환경 변수 사용
set PYTHONPATH=C:/doit/mymod => 대문자. 이렇게 하면 디렉터리 설정.
python
import mod2
2 패키지
- 모듈을 묶어서 관리하는 것
- 패키지 호출:
from 패키지 import 모듈(위의 from 모듈 import 함수와 같음)
2-1 패키지 만들기
- 먼저 폴더로 디렉토리를 설정한다. 상위부터 하위까지 각자 폴더로 만든다. 예를 들면
- game(folder)
- __init__.py
- sound(folder)
- graphic(folder)
- 각자 폴더에 .py로 모듈을 만들어서 그걸 불러오는 것
- __init__.py는, 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 내용은 없어도 되고, 이게 없으면 패키지 일부로 인식을 안한다. => 패키지를 불러오면 이것부터 실행이 되기 때문에, 초기화 코드 포함하거나 관련 설정할 수 있다.
VERSION = 3.5
def print_version_info():
print(f'Version of thie game is {VERSION}')
from .graphic.render import render_test
print('Initializing game...')
- 패키지 안 함수 살행하기
import game.sound.echo => echo 모듈까지 실행
from game.sound import echo => echo 모듈까지 실행
from game.sound.echo import echo_test => echo_test 함수만 들고오기
from game.sound import *: game.sound 모듈의 (모든 것)을 import한다.
이 경우 __init__.py 파일에 __all__ = ['echo']처럼 로 사용 가능한 모듈들을 all변수에 집어넣어서 정의해준다.
import game \n game.sound.echo.echo_test() 이건 불가능. import game하면 game 디렉터리의 init.py에 정의한 것만 참조할 수 있다.
- relative한 접근자
- 디렉토리 설명하는데
.은 현재 디렉터리, .. 부모 디렉터리
from ..sound.echo import echo_test: 현재 디렉토리가 graphic일 때, 하나 앞인 game으로 넘어가서, sound로 간다는 뜻.