Réponses:
Vous pouvez utiliser compilealldans 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 .
-Oindicateur, pour la compilation bytecode (fichier .pyo iso .pyc).
compileallsur mon dossier site-packages et cela a tout gâché
Cela fait un moment que j'ai utilisé Python pour la dernière fois, mais je pense que vous pouvez utiliser py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycet vous obtenez cela comme valeur de retour.
J'ai trouvé plusieurs façons de compiler des scripts python en bytecode
Utilisation py_compiledans le terminal:
python -m py_compile File1.py File2.py File3.py ...
-m spécifie le nom du ou des modules à compiler.
Ou, pour la compilation interactive de fichiers
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.Utilisation py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')Utilisation py_compile.main():
Il compile plusieurs fichiers à la fois.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
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():
import compileall
compileall.compile_dir(direname)
Il compile chaque fichier Python présent dans le répertoire fourni.
Utilisation compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')Jetez un œil aux liens ci-dessous:
py_compileet compileallNON py_compile.pyou compileall.py. En d'autres termes, cela devrait être python3 -m py_compile PYTHON_FILENAMEou python3 -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.
compilealln'inclut pas de logique pour ignorer les fichiers pour lesquels le .pycfichier correspondant est déjà à jour, n'est-ce pas?
compileallles fichiers qui ont déjà une mise à jour .pyc(testé avec Python 2.7.11)
python -m compileall <pythonic-project-name>
ce qui rend compilent tout .pyà .pycdans le projet qui contient les sous - dossiers.
python3 -m compileall <pythonic-project-name>
ce qui fait tout compiler .pyvers le__pycache__ dossiers du projet qui contenaient les sous-dossiers.
Ou avec le brunissement de ce post :
Vous pouvez appliquer la même disposition de
.pycfichiers dans les dossiers que dans Python2 en utilisant:
python3 -m compileall -b <pythonic-project-name>L'option
-bdéclenche la sortie des.pycfichiers vers leurs anciens emplacements (c'est-à-dire le même que dans Python2).
Pour correspondre aux exigences de la question d'origine (chemin source et chemin de destination), le code doit être comme ça:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
Si le code d'entrée contient des erreurs, l' exception py_compile.PyCompileError est déclenchée .
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.
import compileall
import os
lib_path = "your_lib_path"
build_path = "your-dest_path"
compileall.compile_dir(lib_path, force=True, legacy=True)
def compile(cu_path):
for file in os.listdir(cu_path):
if os.path.isdir(os.path.join(cu_path, file)):
compile(os.path.join(cu_path, file))
elif file.endswith(".pyc"):
dest = os.path.join(build_path, cu_path ,file)
os.makedirs(os.path.dirname(dest), exist_ok=True)
os.rename(os.path.join(cu_path, file), dest)
compile(lib_path)
regardez ☞ docs.python.org pour une documentation détaillée