# `compileall` — Byte-compile Python libraries

Вихідний код: Lib/compileall.py

Цей модуль надає деякі службові функції для підтримки встановлення бібліотек Python. Ці функції компілюють вихідні файли Python у дереві каталогів. Цей модуль можна використовувати для створення кешованих файлів байт-коду під час встановлення бібліотеки, що робить їх доступними для використання навіть користувачами, які не мають дозволу на запис до каталогів бібліотеки.

Availability: not Emscripten, not WASI.

This module does not work or is not available on WebAssembly platforms `wasm32-emscripten` and `wasm32-wasi`. See WebAssembly platforms for more information.

## Використання командного рядка

Цей модуль може працювати як сценарій (за допомогою python -m compileall) для компіляції вихідних кодів Python.

directory ...
file ...

  Positional arguments are files to compile or directories that contain source files, traversed recursively. If no argument is given, behave as if the command line was `-l <directories from sys.path>`.

-l

  Не повертайтеся до підкаталогів, лише компілюйте файли вихідного коду, які безпосередньо містяться в названих або неявних каталогах.

-f

  Примусове відновлення, навіть якщо мітки часу актуальні.

-q

  Не друкуйте список зібраних файлів. Якщо передати один раз, повідомлення про помилку все одно друкуватимуться. Якщо передати двічі (`-qq`), весь вивід пригнічується.

-d destdir

  Каталог додається до шляху до кожного файлу, що компілюється. Це відображатиметься у відстеженнях під час компіляції, а також буде скомпільовано у файл байт-коду, де воно використовуватиметься у відстеженнях та інших повідомленнях у випадках, коли вихідний файл не існує під час виконання файлу байт-коду.

-s strip_prefix

-p prepend_prefix

  Видаліть (`-s`) або додайте (`-p`) заданий префікс шляхів, записаних у файлах `.pyc`. Не можна поєднувати з `-d`.

-x regex

  регулярний вираз використовується для пошуку повного шляху до кожного файлу, який розглядається для компіляції, і якщо регулярний вираз видає збіг, файл пропускається.

-i list

  Прочитайте файл `список` і додайте кожен рядок, який він містить, до списку файлів і каталогів для компіляції. Якщо `список` `-`, читати рядки з `stdin`.

-b

  Запишіть файли байт-коду в їхні застарілі розташування та імена, які можуть перезаписати файли байт-коду, створені іншою версією Python. За замовчуванням файли записуються в їхні розташування та імена PEP 3147, що дозволяє співіснувати файлам байт-коду з кількох версій Python.

-r

  Контролюйте максимальний рівень рекурсії для підкаталогів. Якщо це задано, то параметр `-l` не буде взято до уваги. python -m compileall <directory> -r 0 еквівалентно python -m compileall <directory> -l.

-j N

  Use N workers to compile the files within the given directory. If `0` is used, then the result of `os.cpu_count()` will be used.

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

  Керуйте тим, як згенеровані файли байт-коду стають недійсними під час виконання. Значення `timestamp` означає, що будуть створені файли `.pyc` із вбудованою міткою часу джерела та розміром. Значення `checked-hash` і `unchecked-hash` призводять до генерації pyc на основі хешу. pyc на основі хешу вбудовує хеш вмісту вихідного файлу, а не мітку часу. Перегляньте Анулювання кешованого байт-коду для отримання додаткової інформації про те, як Python перевіряє файли кешу байт-коду під час виконання. Типовим значенням є `timestamp`, якщо змінна середовища `SOURCE_DATE_EPOCH` не встановлено, і `checked-hash`, якщо встановлена змінна середовища `SOURCE_DATE_EPOCH`.

-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 уже надає параметр: python -O -m compileall.

Similarly, the `compile()` function respects the `sys.pycache_prefix` setting. The generated bytecode cache will only be useful if `compile()` is run with the same `sys.pycache_prefix` (if any) that will be used at runtime.

## Громадські функції

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`. Повертає значення true, якщо всі файли скомпільовано успішно, і значення false в іншому випадку.

  Параметр maxlevels використовується для обмеження глибини рекурсії; за умовчанням встановлено `sys.getrecursionlimit()`.

  Якщо вказано ddir, він додається до шляху до кожного файлу, що компілюється для використання в трасуванні часу компіляції, а також компілюється у файл байт-коду, де він використовуватиметься в трасуванні та інших повідомленнях у випадках, коли вихідний файл не існує на момент виконання файлу байт-коду.

  Якщо force має значення true, модулі компілюються повторно, навіть якщо мітки часу актуальні.

  Якщо вказано rx, його метод `search` викликається на повному шляху до кожного файлу, який розглядається для компіляції, і якщо він повертає справжнє значення, файл пропускається. Це можна використовувати для виключення файлів, які відповідають регулярному виразу, заданому як об’єкт re.Pattern.

  Якщо quiet має значення `False` або `0` (за замовчуванням), назви файлів та інша інформація друкуються стандартно. Установлено на `1`, друкуються лише помилки. Установлено на `2`, усі виведення пригнічуються.

  Якщо значення legacy має значення true, файли з байт-кодом записуються до своїх застарілих розташувань і імен, які можуть перезаписати файли з байт-кодом, створені іншою версією Python. За замовчуванням файли записуються до їхніх PEP 3147 розташувань та імен, що дозволяє файлам байт-коду з кількох версій Python співіснувати.

  optimize вказує рівень оптимізації для компілятора. Він передається до вбудованої функції `compile()`. Приймає також послідовність рівнів оптимізації, які призводять до кількох компіляцій одного файлу `.py` за один виклик.

  Аргумент workers визначає, скільки робітників використовується для паралельної компіляції файлів. За замовчуванням не використовується кілька робітників. Якщо платформа не може використовувати кілька робітників і надано аргумент workers, то послідовна компіляція буде використана як запасний варіант. Якщо workers дорівнює 0, використовується кількість ядер у системі. Якщо workers нижчий за `0`, буде викликано `ValueError`.

  invalidation_mode має бути членом переліку `py_compile.PycInvalidationMode` і керувати тим, як згенеровані pyc стають недійсними під час виконання.

  The stripdir, prependdir and limit_sl_dest arguments correspond to the `-s`, `-p` and `-e` options described above. They may be specified as `str` or `os.PathLike`.

  Якщо hardlink_dupes має значення true і два файли `.pyc` з різним рівнем оптимізації мають однаковий вміст, використовуйте жорсткі посилання для об’єднання дублікатів файлів.

  Змінено в версії 3.2: Додано параметр legacy і optimize.

  Змінено в версії 3.5: Додано параметр workers.

  Змінено в версії 3.5: Параметр quiet змінено на багаторівневе значення.

  Змінено в версії 3.5: Параметр legacy записує лише файли `.pyc`, а не файли `.pyo` незалежно від значення optimize.

  Змінено в версії 3.6: Приймає path-like object.

  Змінено в версії 3.7: Додано параметр invalidation_mode.

  Змінено в версії 3.7.2: The invalidation_mode parameter’s default value is updated to 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. Повертає значення true, якщо файл скомпільовано успішно, і значення false в іншому випадку.

  Якщо вказано ddir, він додається до шляху до файлу, що компілюється для використання в відстеженнях часу компіляції, а також компілюється у файл байт-коду, де він використовуватиметься в відстеженнях та інших повідомленнях у випадках, коли вихідний файл не існує на момент виконання файлу байт-коду.

  Якщо задано rx, його методу `search` передається повне ім’я шляху до файлу, що компілюється, і якщо він повертає значення true, файл не скомпільується і повертається `True`. Це можна використовувати для виключення файлів, які відповідають регулярному виразу, заданому як об’єкт re.Pattern.

  Якщо quiet має значення `False` або `0` (за замовчуванням), назви файлів та інша інформація друкуються стандартно. Установлено на `1`, друкуються лише помилки. Установлено на `2`, усі виведення пригнічуються.

  Якщо значення legacy має значення true, файли з байт-кодом записуються до своїх застарілих розташувань і імен, які можуть перезаписати файли з байт-кодом, створені іншою версією Python. За замовчуванням файли записуються до їхніх PEP 3147 розташувань та імен, що дозволяє файлам байт-коду з кількох версій Python співіснувати.

  optimize вказує рівень оптимізації для компілятора. Він передається до вбудованої функції `compile()`. Приймає також послідовність рівнів оптимізації, які призводять до кількох компіляцій одного файлу `.py` за один виклик.

  invalidation_mode має бути членом переліку `py_compile.PycInvalidationMode` і керувати тим, як згенеровані pyc стають недійсними під час виконання.

  The stripdir, prependdir and limit_sl_dest arguments correspond to the `-s`, `-p` and `-e` options described above. They may be specified as `str` or `os.PathLike`.

  Якщо hardlink_dupes має значення true і два файли `.pyc` з різним рівнем оптимізації мають однаковий вміст, використовуйте жорсткі посилання для об’єднання дублікатів файлів.

  Нове в версії 3.2.

  Змінено в версії 3.5: Параметр quiet змінено на багаторівневе значення.

  Змінено в версії 3.5: Параметр legacy записує лише файли `.pyc`, а не файли `.pyo` незалежно від значення optimize.

  Змінено в версії 3.7: Додано параметр invalidation_mode.

  Змінено в версії 3.7.2: The invalidation_mode parameter’s default value is updated to 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)

  Байтова компіляція всіх файлів `.py`, знайдених уздовж `sys.path`. Повертає значення true, якщо всі файли скомпільовано успішно, і значення false в іншому випадку.

  Якщо skip_curdir має значення true (за замовчуванням), поточний каталог не включається в пошук. Усі інші параметри передаються до функції `compile_dir()`. Зауважте, що на відміну від інших функцій компіляції, `maxlevels` за умовчанням має `0`.

  Змінено в версії 3.2: Додано параметр legacy і optimize.

  Змінено в версії 3.5: Параметр quiet змінено на багаторівневе значення.

  Змінено в версії 3.5: Параметр legacy записує лише файли `.pyc`, а не файли `.pyo` незалежно від значення optimize.

  Змінено в версії 3.7: Додано параметр invalidation_mode.

  Змінено в версії 3.7.2: The invalidation_mode parameter’s default value is updated to None.

Щоб примусово перекомпілювати всі файли `.py` у підкаталозі `Lib/` та всіх його підкаталогах:

    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`

  Байтова компіляція єдиного вихідного файлу.