# `compileall` — 파이썬 라이브러리 바이트 컴파일하기

소스 코드: Lib/compileall.py

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

## 명령 줄 사용

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

`directory``...`
`file``...`

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

`-l```

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

`-f```

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

`-q```

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

`-d` `destdir`

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

`-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`입니다.

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

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

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

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

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

## 공용 함수

`compileall.``compile_dir`(dir, maxlevels=10, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None)

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

  maxlevels 매개 변수는 재귀의 깊이를 제한하는 데 사용됩니다; 기본값은 `10`입니다.

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

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

  rx가 주어지면, 컴파일 대상으로 고려되는 각 파일의 전체 경로로 그것의 search 메서드를 호출하고, 참값을 반환하면 그 파일을 건너뜁니다.

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

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

  optimize는 컴파일러의 최적화 수준을 지정합니다. 내장 `compile()` 함수로 전달됩니다.

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

  invalidation_mode는 `py_compile.PycInvalidationMode` 열거형의 멤버여야 하며 실행 시간에 생성된 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으로 설정하면 최적의 코어 수가 선택됩니다.

`compileall.``compile_file`(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)

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

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

  rx가 주어지면, 컴파일 중인 파일의 전체 경로가 그것의 search 메서드로 전달되고, 참값을 반환하면, 파일이 컴파일되지 않고 `True`가 반환됩니다.

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

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

  optimize는 컴파일러의 최적화 수준을 지정합니다. 내장 `compile()` 함수로 전달됩니다.

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

  버전 3.2에 추가.

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

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

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

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

`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`

  단일 소스 파일을 바이트 컴파일합니다.