Aus irgendeinem Grund kann ich mich nicht auf Pythons "import" -Anweisung verlassen, um eine .pyc-Datei automatisch zu generieren
Gibt es eine Möglichkeit, eine Funktion wie folgt zu implementieren?
def py_to_pyc(py_filepath, pyc_filepath):
...
-O
Flag an, um den Bytecode (.pyo file iso .pyc) zu kompilieren.compileall
Ordner in meinem Site-Paket erstellt und alles durcheinander gebrachtSie können einzelne Dateien über die Befehlszeile kompilieren mit:
quelle
Es ist schon eine Weile her, seit ich Python das letzte Mal verwendet habe, aber ich glaube, Sie können Folgendes verwenden
py_compile
:quelle
__pycache__/file.cpython-32.pyc
und Sie erhalten dies als Rückgabewert.Ich habe verschiedene Möglichkeiten gefunden, Python-Skripte in Bytecode zu kompilieren
Verwendung
py_compile
im Terminal:-m
Gibt den Namen des zu kompilierenden Moduls an.Oder zum interaktiven Zusammenstellen von Dateien
Verwenden von
py_compile.compile
:Verwenden von
py_compile.main()
:Es werden mehrere Dateien gleichzeitig kompiliert.
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()
:Es kompiliert jede einzelne Python-Datei, die im angegebenen Verzeichnis vorhanden ist.
Verwenden von
compileall.compile_file()
:Schauen Sie sich die folgenden Links an:
https://docs.python.org/3/library/py_compile.html
https://docs.python.org/3/library/compileall.html
quelle
py_compile
undcompileall
NICHTpy_compile.py
oder istcompileall.py
. Mit anderen Worten, es solltepython3 -m py_compile PYTHON_FILENAME
oder seinpython3 -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.
quelle
compileall
Enthält keine Logik zum Überspringen von Dateien, für die die entsprechende.pyc
Datei bereits aktuell ist, oder?compileall
überspringt Dateien, die bereits auf dem neuesten Stand sind.pyc
(getestet mit Python 2.7.11)In Python2 können Sie Folgendes verwenden:
das macht alle kompilieren
.py
.pyc
in dem Projekt , das die Unterordner enthielt.In Python3 können Sie Folgendes verwenden:
das macht alle kompilieren
.py
__pycache__
Ordner im Projekt , die die Unterordner enthalten.Oder mit Bräunung von diesem Beitrag :
quelle
Um den ursprünglichen Fragenanforderungen (Quell- und Zielpfad) zu entsprechen, sollte der Code folgendermaßen aussehen:
Wenn der Eingabecode Fehler enthält, wird die Ausnahme py_compile.PyCompileError ausgelöst .
quelle
Es gibt zwei Möglichkeiten, dies zu tun
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.
Blick auf ☞ docs.python.org für ausführliche Dokumentation
quelle