Pour une raison quelconque, je ne peux pas dépendre de l'instruction "import" de Python pour générer automatiquement un fichier .pyc
Existe-t-il un moyen d'implémenter une fonction comme suit?
def py_to_pyc(py_filepath, pyc_filepath):
...
Vous pouvez utiliser compileall
dans le terminal. La commande suivante ira récursivement dans les sous-répertoires et créera des fichiers pyc pour tous les fichiers python qu'elle trouve. Le module compileall fait partie de la bibliothèque standard python, vous n'avez donc pas besoin d'installer quoi que ce soit de plus pour l'utiliser. Cela fonctionne exactement de la même manière pour python2 et python3.
python -m compileall .
-O
indicateur, pour la compilation bytecode (fichier .pyo iso .pyc).compileall
sur mon dossier site-packages et cela a tout gâchéVous pouvez compiler des fichiers individuels à partir de la ligne de commande avec:
la source
Cela fait un moment que j'ai utilisé Python pour la dernière fois, mais je pense que vous pouvez utiliser
py_compile
:la source
__pycache__/file.cpython-32.pyc
et vous obtenez cela comme valeur de retour.J'ai trouvé plusieurs façons de compiler des scripts python en bytecode
Utilisation
py_compile
dans le terminal:-m
spécifie le nom du ou des modules à compiler.Ou, pour la compilation interactive de fichiers
Utilisation
py_compile.compile
:Utilisation
py_compile.main()
:Il compile plusieurs fichiers à la fois.
La liste peut s'allonger aussi longtemps que vous le souhaitez. Alternativement, vous pouvez évidemment passer une liste de fichiers dans les noms de fichiers principaux ou même dans les arguments de ligne de commande.
Ou, si vous passez
['-']
dans main, il peut compiler des fichiers de manière interactive.Utilisation
compileall.compile_dir()
:Il compile chaque fichier Python présent dans le répertoire fourni.
Utilisation
compileall.compile_file()
:Jetez un œil aux liens ci-dessous:
https://docs.python.org/3/library/py_compile.html
https://docs.python.org/3/library/compileall.html
la source
py_compile
etcompileall
NONpy_compile.py
oucompileall.py
. En d'autres termes, cela devrait êtrepython3 -m py_compile PYTHON_FILENAME
oupython3 -m compileall PYTHON_FILES_DIRECTORY
.J'utiliserais compileall . Cela fonctionne bien à la fois à partir de scripts et de la ligne de commande. C'est un module / outil de niveau un peu plus élevé que le py_compile déjà mentionné qu'il utilise également en interne.
la source
compileall
n'inclut pas de logique pour ignorer les fichiers pour lesquels le.pyc
fichier correspondant est déjà à jour, n'est-ce pas?compileall
les fichiers qui ont déjà une mise à jour.pyc
(testé avec Python 2.7.11)En Python2, vous pouvez utiliser:
ce qui rend compilent tout
.py
à.pyc
dans le projet qui contient les sous - dossiers.En Python3, vous pouvez utiliser:
ce qui fait tout compiler
.py
vers le__pycache__
dossiers du projet qui contenaient les sous-dossiers.Ou avec le brunissement de ce post :
la source
Pour correspondre aux exigences de la question d'origine (chemin source et chemin de destination), le code doit être comme ça:
Si le code d'entrée contient des erreurs, l' exception py_compile.PyCompileError est déclenchée .
la source
Il y a deux façons de faire cela
Si vous utilisez la ligne de commande, utilisez
python -m compileall <argument>
pour compiler du code python en code binaire python. Ex:python -m compileall -x ./*
Ou, vous pouvez utiliser ce code pour compiler votre bibliothèque en byte-code.
regardez ☞ docs.python.org pour une documentation détaillée
la source