Antworten:
Sie können compileallim Terminal verwenden. Der folgende Befehl wird rekursiv in Unterverzeichnisse verschoben und erstellt Pyc-Dateien für alle gefundenen Python-Dateien. Das Compileall- Modul ist Teil der Python-Standardbibliothek, sodass Sie nichts extra installieren müssen, um es zu verwenden. Dies funktioniert genauso für Python2 und Python3.
python -m compileall .
-OFlag an, um den Bytecode (.pyo file iso .pyc) zu kompilieren.
compileallOrdner in meinem Site-Paket erstellt und alles durcheinander gebracht
Es ist schon eine Weile her, seit ich Python das letzte Mal verwendet habe, aber ich glaube, Sie können Folgendes verwenden py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycund Sie erhalten dies als Rückgabewert.
Ich habe verschiedene Möglichkeiten gefunden, Python-Skripte in Bytecode zu kompilieren
Verwendung py_compileim Terminal:
python -m py_compile File1.py File2.py File3.py ...
-m Gibt den Namen des zu kompilierenden Moduls an.
Oder zum interaktiven Zusammenstellen von Dateien
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.Verwenden von py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')Verwenden von py_compile.main():
Es werden mehrere Dateien gleichzeitig kompiliert.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
Die Liste kann beliebig lang werden. Alternativ können Sie natürlich eine Liste von Dateien in Haupt- oder sogar Dateinamen in Befehlszeilenargumenten übergeben.
Wenn Sie ['-']main übergeben, können Dateien interaktiv kompiliert werden.
Verwenden von compileall.compile_dir():
import compileall
compileall.compile_dir(direname)
Es kompiliert jede einzelne Python-Datei, die im angegebenen Verzeichnis vorhanden ist.
Verwenden von compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')Schauen Sie sich die folgenden Links an:
py_compileund compileallNICHT py_compile.pyoder ist compileall.py. Mit anderen Worten, es sollte python3 -m py_compile PYTHON_FILENAMEoder sein python3 -m compileall PYTHON_FILES_DIRECTORY.
Ich würde compileall verwenden . Es funktioniert gut sowohl über Skripte als auch über die Befehlszeile. Es ist ein etwas höheres Modul / Tool als das bereits erwähnte py_compile , das es auch intern verwendet.
compileallEnthält keine Logik zum Überspringen von Dateien, für die die entsprechende .pycDatei bereits aktuell ist, oder?
compileallüberspringt Dateien, die bereits auf dem neuesten Stand sind .pyc(getestet mit Python 2.7.11)
python -m compileall <pythonic-project-name>
das macht alle kompilieren .py.pyc in dem Projekt , das die Unterordner enthielt.
python3 -m compileall <pythonic-project-name>
das macht alle kompilieren .py__pycache__ Ordner im Projekt , die die Unterordner enthalten.
Oder mit Bräunung von diesem Beitrag :
Sie können das gleiche Layout von erzwingen
.pycDateien in den Ordnern wie in Python2 erzwingen, indem Sie Folgendes verwenden:
python3 -m compileall -b <pythonic-project-name>Die Option
-blöst die Ausgabe von.pycDateien an ihren Legacy-Speicherorten aus (dh wie in Python2).
Wenn Sie die Befehlszeile verwenden python -m compileall <argument>, kompilieren Sie Python-Code in Python-Binärcode. Ex:python -m compileall -x ./*
Oder Sie können diesen Code verwenden, um Ihre Bibliothek in Bytecode zu kompilieren.
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)
Blick auf ☞ docs.python.org für ausführliche Dokumentation