7.1.모듈
- 스크립트: 소스코드를 파일에 기술하여 반복 실행을 지원
- 모듈: 다른파일에서 정의한 클래스나 함수
파이썬에서 모듈과 스크립트의 명확한 차이는 없음
1. 모듈작성
- str을 base64로 변환하는 모듈
- 위 모듈은 base64 모듈을 읽어드린다. (모듈 import)
2. 모듈 임포트
- 모듈을 읽어들이는 행위
- encoder: module 클래스의 인스턴스
- 모듈안에 정의된 함수 호출
3. python3 명령어로 직접 실행하기
7.2 패키지-모듈의 집합
- 패키지: 여러 모듈을 모으는 기능
- 모듈/ 서브패키지를 모아둔 디렉터리
- 패키지임을 표시하기위해 __init__.py 파일을 배치
- 규모가 커지더라도 유지보수성을 지킬 수 있다.
1. 패키지 작성
- 패키지 객체는 모듈 객체와 거의 같지만 __path__속성을 가지고있다는 차이가 있다.
- encoder.py를 b64 패키지 하위에 이동
- decoder.py를 만들고 b64 패키지 하위에 이동
2. 패키지 안에 있는 모듈 임포트
-
__init__.py - 패키지 초기화 수행
-
__init__.py의 편리한 사용법
- {패키지 이름}.{속성 이름}으로 참조 할수 있는 API를 만든다고 해 보자
- 현재 에러
- __init__.py 변경
- 속성이 추가되었다.
3. import문 비교
7.3 임포트의 구조
1. 모듈 검색 흐름
- 표준라이브러리 검색 -> sys.path의 경로 목록 차례로 검색 -> 발견 못할시 ModuleNotFoundError 발생
2. sys.path-모듈 검색 경로
맨앞이 빈문자라면 현재 디렉터리, 이후 목록 차례로 검색
스크립트 파일과 같은 디렉터리가 가장 먼저 검색
-
-
-
검색 경로의 우선순위
3. PYTHONPATH - sys.path에 검색 경로를 추가
- PYTHONPATH 환경변수 추가시 sys.path에 자동추가
- 원하는 scope를 정할 수 있음
7.4 이름 공간과 변수의 스코프
1. 이름공간 - 이름과 객체의 매핑
- 이름 공간 활용
- 이름과 객체의 맵핑
- os.open(), gizp.open()은 함수명은 같으나 다른 이름공간에 들어있어 다르게 실행된다.
2. 스코프 - 직접 접근할 수 있는 영역
이름검색은 좁은스코프에서 넓은스코프로 순서대로 일어나며 가장 먼저 발견한 이름의 객체를 참조