본문 바로가기

공부/Python

[Learning Python] Chapter 23. Modules : The Big Picture

Chapter 22. Modules: The Big Picture

이번 챕터는 파이썬 module을 조금 더 깊이있게 살펴볼 차례다. 모듈은 프로그램을 구성하는 최상위 구성 단위이다. 모듈은 재사용을 위한 코드와 데이터를 묶는다. 그리고 프로그램 사이에서 변수이름 충돌을 최소화하기 위한 독립적인 네임스페이스를 제공한다.


모듈이란 용어는 통상적으로 파이썬 프로그램 파일을 말한다. 각각의 파일이 모듈이다. 모듈을 또 다른 모듈을 임포트하여 사용할 수 있다. 또한 모듈은 C, Java, C# 같은 외부 언어로 코딩된 확장코드를 지칭할 수도 있고, 패키지 디렉토리를 지칭할 수도 있다.


모듈과 관련한 statement는 두가지이다.

import : 모듈 전체를 임포트

from : 모듈 내의 특정 네임을 사용함.


첫 챕터에서 기본적인 내용을 다루고, 두번째 챕터에서 디테일한 내용을 다룬다. __name__이나 __all__ 속성, 패키지 임포트, 상대적 임포트 reload, 네임스페이스 등을 배운다. 모듈과 클래스는 사실 namespaces의 다른 말이기 때문에 더 잘 알 필요가 있다.


Why Use Modules?

모듈은 시스템 구성요소를 구성하는 가장 쉬운 방법을 제공한다. namespaces라는 자체적으로 가지고있는 변수 패키지를 제공하여 이러한 시스템을 구성한다.
모듈파일에서 최상위 레벨에 정의된 모든 이름들이 임포트된 모듈 오브젝트의 속성이 된다.
이 책의 마지막 부분에서 imports는 모듈의 global 범위는 names에 접근할 수 있게 한다는 내용을 말할 것이다. 즉, 모듈파일의 global 범위는 임포트될 때 모듈 객체의 namespace 속성을 변형시킨다. 궁극적으로 파이썬 모듈은 각각의 파일을 더 큰 프로그램 시스템과 연결하게 해준다.

모듈의 역할은 세가지다.
코드 재사용
모듈은 attribute를 정의하는 공간이다. 이것은 여러 외부 클라이언트에게 참조될 수 있다. 잘 사용하면, 기능별로 재사용 가능한 유닛으로 묶는 modular 프로그램 디자인을 만들 수 있다.

시스템 네임스패이스 분리
모듈을 최상위 프로그램 구성 단위이다. 기본적으로 그것들은 names의 패키지지만, 이 패키지들은 유저가 명시적으로 그 파일을 임포트하지 않으면 다른 파일에서 볼 수 없는 self-contained이기도 하다. 함수의 로컬 범위에서, 이것은 name이 다른 프로그램과 충돌하는 것을 방지한다. 사실 이 특징은 피할 수가 없다. 모듈 안에서 모든 것이 살아있고 당신이 실행시키는 코드와 생성한 객체들은 모두 항상 암묵적으로 모듈 안에 포함되어 있다. 그렇기 때문에 모듈은 시스템 구성요소를 그룹핑하는 중립적인 툴이다.  

공유 서비스, 공유 데이터 구성
공유하는 객체가 있으면 임포트만해서 공통적으로 사용할 수 있다.

Python Program Architecture

이 섹션에서는 파이썬 프로그램의 전형적인 architecture를 소개한다. 파이썬은 기능을 일관성있게 그리고 재사용가능한 단위로, 중립적이고 최대한 자동화되게끔 그룹핑하는 모듈러 프로그램 구조에 특화되도록 만들어져왔다. 이러한 방식으로 파이썬 모듈, 임포트, 객체속성을 살펴본다.

How to Structure a Program
기본적인 수준에서, 파이썬은 파이썬 statements(구문)와 하나의 메인 top-level 파일, 0개 이상의 module이라고 말하는 코드가 채워진 파일로 이루어져 있다.

동작방법은 다음과 같다. 최상위 파일이 프로그램을 돌리는 메인 플로우를 갖고있다. 모듈파일은 최상위 파일에서 사용되어지는 구성요소를 모은 도구들의 라이브러리다. 최상위 파일은 모듈파일에서 정의된 도구들을 사용하고 모듈은 다른 모듈에 들어있는 또 다른 도구들을 사용한다.

모듈들도 코드이긴 하지만 직접적으로 실행시켰을 때, 아무것도 하지 않는다. 단지 다른 파일에서 사용할 수 있도록 툴만 제공한다. 여기서 이러한 툴에 접근 가능하게 하는 것을 import한다라고 하고, 이러한 도구에 접근하는 이름을 attribute라고 한다. 


Import and Attributes


Standard Library Modules



How Imports Work



1. Find it

2. Compile it (Maybe)

3. Run it



Byte Code Files: __pycache__ in Python 3.2+


Byte Code File Models in Action


The Module Search Path


Configuring the Search Path

Search Path Variations

The sys.path List


Module File Selection

MODULE SOURCES

SELECTION PRIORITIES

IMPORT HOOKS AND ZIP FILES

OPTIMIZED BYTE CODE FILES