"compileall" --- 파이썬 라이브러리 바이트 컴파일하기
****************************************************

**소스 코드:** Lib/compileall.py

======================================================================

이 모듈은 파이썬 라이브러리 설치를 지원하는 몇 가지 유틸리티 함수를 제
공합니다. 이 함수는 디렉터리 트리에서 파이썬 소스 파일을 컴파일합니다.
이 모듈을 사용하면 라이브러리 설치 시 캐시 된 바이트 코드 파일을 만들
수 있으므로, 라이브러리 디렉터리에 쓰기 권한이 없는 사용자도 사용할 수
있도록 합니다.


명령 줄 사용
============

이 모듈은 파이썬 소스를 컴파일하는 스크립트로 작동할 수 있습니다
(**python -m compileall**을 사용합니다).

directory ...
file ...

   위치 인자는 컴파일할 파일이나 소스 파일을 포함하는 디렉터리이며 재
   귀적으로 탐색 됩니다. 인자가 주어지지 않으면, 명령 줄이 "-l
   <directories from sys.path>" 인 것처럼 행동합니다.

-l

   서브 디렉터리를 재귀적으로 탐색하지 않고, 이름이 지정되었거나 암시
   된 디렉터리에 직접 포함된 소스 코드 파일 만 컴파일합니다.

-f

   타임스탬프가 최신일 때도 강제로 다시 빌드합니다.

-q

   컴파일된 파일 목록을 인쇄하지 않습니다. 한 번 전달하면, 에러 메시지
   는 여전히 인쇄됩니다. 두 번 전달하면 ("-qq"), 모든 출력이 억제됩니
   다.

-d destdir

   디렉터리가 컴파일되는 각 파일의 경로 앞에 추가됩니다. 이것은 컴파일
   시간 트레이스백에 나타나며, 바이트 코드 파일에 컴파일되어 들어가서,
   바이트 코드 파일이 실행되는 시점에 소스 파일이 존재하지 않으면 트레
   이스백과 기타 메시지에 사용됩니다.

-s strip_prefix

-p prepend_prefix

   ".pyc" 파일에 기록된 지정된 경로 접두사를 제거("-s")하거나 추가
   ("-p")합니다. "-d"와 함께 사용할 수 없습니다.

-x regex

   regex는 컴파일 대상으로 고려되는 각 파일의 전체 경로를 검색(search)
   하는 데 사용되며, 정규식이 일치를 생성하면 그 파일을 건너뜁니다.

-i list

   파일 "list"를 읽고 포함된 각 줄을 컴파일할 파일과 디렉터리 목록에
   추가합니다. "list"가 "-"이면, "stdin"에서 줄을 읽습니다.

-b

   바이트 코드 파일을 레거시 위치 및 이름에 써서, 다른 버전의 파이썬이
   만든 바이트 코드 파일을 덮어쓸 수 있습니다. 기본값은 여러 버전의 파
   이썬의 바이트 코드 파일이 공존할 수 있는 **PEP 3147** 위치와 이름에
   파일을 쓰는 것입니다.

-r

   서브 디렉터리의 최대 재귀 수준을 제어합니다. 이것이 주어지면, "-l"
   옵션은 고려되지 않습니다. **python -m compileall <directory> -r 0**
   은 **python -m compileall <directory> -l**과 동등합니다.

-j N

   주어진 디렉터리 내의 파일을 컴파일하는 데 *N* 작업자를 사용합니다.
   "0"이 사용되면, "os.cpu_count()"의 결과가 사용됩니다.

--invalidation-mode [timestamp|checked-hash|unchecked-hash]

   생성된 바이트 코드 파일이 실행 시간에 무효가 되는 방식을 제어합니다
   . "timestamp" 값은 소스 타임스탬프와 크기가 포함된 ".pyc" 파일이 생
   성됨을 의미합니다. "checked-hash"와 "unchecked-hash" 값은 해시 기반
   pyc를 생성합니다. 해시 기반 pyc는 타임스탬프 대신 소스 파일 내용의
   해시를 포함합니다. 파이썬이 실행 시간에 바이트 코드 캐시 파일의 유
   효성을 검사하는 방법에 대한 자세한 내용은 캐시된 바이트 코드 무효화
   를 참조하십시오. 기본값은 "SOURCE_DATE_EPOCH" 환경 변수가 설정되지
   않으면 "timestamp"이고, "SOURCE_DATE_EPOCH" 환경 변수가 설정되면
   "checked-hash"입니다.

-o level

   주어진 최적화 수준으로 컴파일합니다. 한 번에 여러 수준으로 컴파일하
   기 위해 여러 번 사용할 수 있습니다 (예를 들어, "compileall -o 1 -o
   2").

-e dir

   지정된 디렉터리 외부를 가리키는 심볼릭 링크를 무시합니다.

--hardlink-dupes

   최적화 수준이 다른 두 개의 ".pyc" 파일의 내용이 같으면, 하드 링크를
   사용하여 중복 파일을 통합합니다.

버전 3.2에서 변경: "-i", "-b" 및 "-h" 옵션이 추가되었습니다.

버전 3.5에서 변경: "-j", "-r" 및 "-qq" 옵션이 추가되었습니다. "-q" 옵
션이 다중 수준 값으로 변경되었습니다. "-b"는 항상 ".pyc"로 끝나는 바이
트 코드 파일을 생성하며, 결코 ".pyo"를 생성하지 않습니다.

버전 3.7에서 변경: "--invalidation-mode" 옵션이 추가되었습니다.

버전 3.9에서 변경: "-s", "-p", "-e" 및 "--hardlink-dupes" 옵션을 추가
했습니다. 기본 재귀 제한을 10에서 "sys.getrecursionlimit()"로 올렸습니
다. "-o" 옵션을 여러 번 지정할 수 있는 가능성이 추가되었습니다.

"compile()" 함수가 사용하는 최적화 수준을 제어하는 명령 줄 옵션은 없습
니다. 파이썬 인터프리터 자신이 그 옵션을 제공하고 있기 때문입니다:
**python -O -m compileall**.

마찬가지로, "compile()" 함수는 "sys.pycache_prefix" 설정을 따릅니다.
생성된 바이트 코드 캐시는 "compile()"이 실행 시간에 사용될 것과 같은
"sys.pycache_prefix"(있다면)로 실행될 때만 유용합니다.


공용 함수
=========

compileall.compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

   *dir*로 명명된 디렉터리 트리를 재귀적으로 탐색해 내려가면서, 발견되
   는 모든 ".py" 파일을 컴파일합니다. 모든 파일이 성공적으로 컴파일되
   면 참값을 반환하고, 그렇지 않으면 거짓값을 반환합니다.

   *maxlevels* 매개 변수는 재귀의 깊이를 제한하는 데 사용됩니다; 기본
   값은 "sys.getrecursionlimit()"입니다.

   *ddir*이 주어지면, 컴파일 시간 트레이스백에서 사용하기 위해 컴파일
   되는 각 파일의 경로 앞에 추가되며, 바이트 코드 파일에 컴파일되어 들
   어가서, 바이트 코드 파일이 실행되는 시점에 소스 파일이 존재하지 않
   으면 트레이스백과 기타 메시지에 사용됩니다.

   *force*가 참이면, 타임스탬프가 최신일 때도 모듈이 다시 컴파일됩니다
   .

   If *rx* is given, its "search" method is called on the complete
   path to each file considered for compilation, and if it returns a
   true value, the file is skipped. This can be used to exclude files
   matching a regular expression, given as a re.Pattern object.

   *quiet*가 "False"나 "0"(기본값)이면, 파일명과 기타 정보가 표준 출력
   에 인쇄됩니다. "1"로 설정하면, 에러만 인쇄됩니다. "2"로 설정하면,
   모든 출력이 억제됩니다.

   *legacy*가 참이면, 바이트 코드 파일을 레거시 위치 및 이름에 써서,
   다른 버전의 파이썬이 만든 바이트 코드 파일을 덮어쓸 수 있습니다. 기
   본값은 여러 버전의 파이썬의 바이트 코드 파일이 공존할 수 있는 **PEP
   3147** 위치와 이름에 파일을 쓰는 것입니다.

   *optimize*는 컴파일러의 최적화 수준을 지정합니다. 내장 "compile()"
   함수로 전달됩니다. 한 번의 호출로 하나의 ".py" 파일을 여러 번 컴파
   일하도록 하는 최적화 수준의 시퀀스도 허용합니다.

   인자 *workers*는 파일을 컴파일하는 데 병렬로 사용되는 작업자 수를
   지정합니다. 기본값은 다중 작업자를 사용하지 않는 것입니다. 플랫폼이
   다중 작업자를 사용할 수 없고 *workers* 인자가 주어지면, 순차 컴파일
   로 대체합니다. *workers*가 0이면 시스템의 코어 수가 사용됩니다.
   *workers*가 "0"보다 작으면, "ValueError"가 발생합니다.

   *invalidation_mode*는 "py_compile.PycInvalidationMode" 열거형의 멤
   버여야 하며 실행 시간에 생성된 pyc가 무효가 되는 방식을 제어합니다.

   *stripdir*, *prependdir* 및 *limit_sl_dest* 인자는 위에서 설명한
   "-s", "-p" 및 "-e" 옵션에 해당합니다. "str", "bytes" 또는
   "os.PathLike"으로 지정할 수 있습니다.

   *hardlink_dupes*가 참이고 최적화 수준이 다른 두 개의 ".pyc" 파일의
   내용이 같으면, 하드 링크를 사용하여 중복 파일을 통합합니다.

   버전 3.2에서 변경: *legacy*와 *optimize* 매개 변수가 추가되었습니다
   .

   버전 3.5에서 변경: *workers* 매개 변수가 추가되었습니다.

   버전 3.5에서 변경: *quiet* 매개 변수가 다중 수준 값으로 변경되었습
   니다.

   버전 3.5에서 변경: *legacy* 매개 변수는 *optimize* 값과 상관없이
   ".pyo" 파일이 아니라 ".pyc" 파일 만 기록합니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.7에서 변경: *invalidation_mode* 매개 변수가 추가되었습니다.

   버전 3.7.2에서 변경: *invalidation_mode* 매개 변수의 기본값이 None
   으로 변경되었습니다.

   버전 3.8에서 변경: *workers*를 0으로 설정하면 최적의 코어 수가 선택
   됩니다.

   버전 3.9에서 변경: *stripdir*, *prependdir*, *limit_sl_dest* 및
   *hardlink_dupes* 인자가 추가되었습니다. *maxlevels*의 기본값이 "10"
   에서 "sys.getrecursionlimit()"으로 변경되었습니다.

compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)

   경로 *fullname*의 파일을 컴파일합니다. 파일이 성공적으로 컴파일되면
   참값을 반환하고, 그렇지 않으면 거짓값을 반환합니다.

   *ddir*이 주어지면, 컴파일 시간 트레이스백에서 사용하기 위해 컴파일
   되는 파일의 경로 앞에 추가되며, 바이트 코드 파일에 컴파일되어 들어
   가서, 바이트 코드 파일이 실행되는 시점에 소스 파일이 존재하지 않으
   면 트레이스백과 기타 메시지에 사용됩니다.

   If *rx* is given, its "search" method is passed the full path name
   to the file being compiled, and if it returns a true value, the
   file is not compiled and "True" is returned. This can be used to
   exclude files matching a regular expression, given as a re.Pattern
   object.

   *quiet*가 "False"나 "0"(기본값)이면, 파일명과 기타 정보가 표준 출력
   에 인쇄됩니다. "1"로 설정하면, 에러만 인쇄됩니다. "2"로 설정하면,
   모든 출력이 억제됩니다.

   *legacy*가 참이면, 바이트 코드 파일을 레거시 위치 및 이름에 써서,
   다른 버전의 파이썬이 만든 바이트 코드 파일을 덮어쓸 수 있습니다. 기
   본값은 여러 버전의 파이썬의 바이트 코드 파일이 공존할 수 있는 **PEP
   3147** 위치와 이름에 파일을 쓰는 것입니다.

   *optimize*는 컴파일러의 최적화 수준을 지정합니다. 내장 "compile()"
   함수로 전달됩니다. 한 번의 호출로 하나의 ".py" 파일을 여러 번 컴파
   일하도록 하는 최적화 수준의 시퀀스도 허용합니다.

   *invalidation_mode*는 "py_compile.PycInvalidationMode" 열거형의 멤
   버여야 하며 실행 시간에 생성된 pyc가 무효가 되는 방식을 제어합니다.

   *stripdir*, *prependdir* 및 *limit_sl_dest* 인자는 위에서 설명한
   "-s", "-p" 및 "-e" 옵션에 해당합니다. "str", "bytes" 또는
   "os.PathLike"으로 지정할 수 있습니다.

   *hardlink_dupes*가 참이고 최적화 수준이 다른 두 개의 ".pyc" 파일의
   내용이 같으면, 하드 링크를 사용하여 중복 파일을 통합합니다.

   버전 3.2에 추가.

   버전 3.5에서 변경: *quiet* 매개 변수가 다중 수준 값으로 변경되었습
   니다.

   버전 3.5에서 변경: *legacy* 매개 변수는 *optimize* 값과 상관없이
   ".pyo" 파일이 아니라 ".pyc" 파일 만 기록합니다.

   버전 3.7에서 변경: *invalidation_mode* 매개 변수가 추가되었습니다.

   버전 3.7.2에서 변경: *invalidation_mode* 매개 변수의 기본값이 None
   으로 변경되었습니다.

   버전 3.9에서 변경: *stripdir*, *prependdir*, *limit_sl_dest* 및
   *hardlink_dupes* 인자가 추가되었습니다.

compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)

   "sys.path"에서 발견된 모든 ".py" 파일을 바이트 컴파일합니다. 모든
   파일이 성공적으로 컴파일되면 참값을 반환하고, 그렇지 않으면 거짓값
   을 반환합니다.

   *skip_curdir*가 참(기본값)이면, 현재 디렉터리가 검색에 포함되지 않
   습니다. 다른 모든 매개 변수는 "compile_dir()" 함수에 전달됩니다. 다
   른 컴파일 함수와 달리, "maxlevels"의 기본값은 "0"임에 유의하십시오.

   버전 3.2에서 변경: *legacy*와 *optimize* 매개 변수가 추가되었습니다
   .

   버전 3.5에서 변경: *quiet* 매개 변수가 다중 수준 값으로 변경되었습
   니다.

   버전 3.5에서 변경: *legacy* 매개 변수는 *optimize* 값과 상관없이
   ".pyo" 파일이 아니라 ".pyc" 파일 만 기록합니다.

   버전 3.7에서 변경: *invalidation_mode* 매개 변수가 추가되었습니다.

   버전 3.7.2에서 변경: *invalidation_mode* 매개 변수의 기본값이 None
   으로 변경되었습니다.

"Lib/" 서브 디렉터리와 그것의 모든 서브 디렉터리에 있는 모든 ".py" 파
일을 강제로 다시 컴파일하려면 다음과 같이 합니다:

   import compileall

   compileall.compile_dir('Lib/', force=True)

   # Perform same compilation, excluding files in .svn directories.
   import re
   compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)

   # pathlib.Path objects can also be used.
   import pathlib
   compileall.compile_dir(pathlib.Path('Lib/'), force=True)

더 보기:

  모듈 "py_compile"
     단일 소스 파일을 바이트 컴파일합니다.
