# 32.10. `py_compile` — Compilation de sources Python

Code source : Lib/py_compile.py

Le module `py_compile` définit une fonction principale qui génère un fichier de code intermédiaire à partir d’un fichier source. Il exporte également la fonction qu’il exécute quand il est lancé en tant que script.

Bien que ce module ne soit pas d’usage fréquent, il peut servir lors de l’installation de bibliothèques partagées, notamment dans le cas où tous les utilisateurs n’ont pas les privilèges d’écriture dans l’emplacement d’installation.

exception `py_compile.``PyCompileError`

  Exception levée quand une erreur se produit à la compilation.

`py_compile.``compile`(file, cfile=None, dfile=None, doraise=False, optimize=-1)

  Compile a source file to byte-code and write out the byte-code cache file. The source code is loaded from the file named file. The byte-code is written to cfile, which defaults to the PEP 3147/PEP 488 path, ending in `.pyc`. For example, if file is `/foo/bar/baz.py` cfile will default to `/foo/bar/__pycache__/baz.cpython-32.pyc` for Python 3.2. If dfile is specified, it is used as the name of the source file in error messages when instead of file. If doraise is true, a `PyCompileError` is raised when an error is encountered while compiling file. If doraise is false (the default), an error string is written to `sys.stderr`, but no exception is raised. This function returns the path to byte-compiled file, i.e. whatever cfile value was used.

  Si le chemin de destination, explicité par cfile ou choisi automatiquement, est un lien symbolique, ou n’est pas un véritable fichier, une exception de type `FileExistsError` est levée. Ceci, dans le but de vous avertir que le système d’importation changera ces chemins en fichiers s’il est autorisé à y écrire des fichiers de code intermédiaire. En effet, les importations passent par un renommage final du fichier de code intermédiaire vers sa destination, afin d’éviter les problèmes liés à l’écriture simultanée d’un même fichier par plusieurs processus.

  optimize règle le niveau d’optimisation. Ce paramètre est passé directement à la fonction native `compile()`. Avec la valeur par défaut de `-1`, le code intermédiaire hérite du niveau d’optimisation de l’interpréteur courant.

  Modifié dans la version 3.2: la méthode de choix de destination a changé au profit de celle décrite dans la PEP 3147. Auparavant, le nom du fichier de code intermédiaire était file + `'c'` (ou `'o'` lorsque les optimisations étaient actives). Le paramètre optimize a été ajouté.

  Modifié dans la version 3.4: le code a été modifié pour faire appel à `importlib` dans les opérations d’écriture du code intermédiaire. Ce module se comporte donc exactement comme `importlib` en ce qui concerne, par exemple, les permissions, ou le renommage final qui garantit une opération atomique. `FileExistsError` est désormais levée si la destination est un lien symbolique ou n’est pas un véritable fichier.

`py_compile.``main`(args=None)

  Compile et met en cache tous les fichiers de la séquence args, ou ceux passés comme arguments en ligne de commande si args est `None`. Cette fonction n’effectue aucune recherche des fichiers sources dans des dossiers. Elle compile simplement les fichiers nommés un par un. Si `'-'` est le seul paramètre dans args, la liste des fichiers est lue sur l’entrée standard.

  Modifié dans la version 3.2: prise en charge de `'-'`.

Lorsque ce module est exécuté en tant que script, la fonction `main()` compile tous les fichiers passés comme arguments sur la ligne de commande. Le code de retour vaut zéro si tous ont été compilés sans erreur.

Voir aussi

Module `compileall`

  Utilitaires pour compiler des fichiers source Python dans une arborescence