Risposte:
È possibile utilizzare compileallnel terminale. Il seguente comando andrà ricorsivamente in sottodirectory e creerà file pyc per tutti i file python che trova. Il modulo compileall fa parte della libreria standard di Python, quindi non è necessario installare nulla in più per usarlo. Funziona esattamente allo stesso modo per python2 e python3.
python -m compileall .
-Obandiera, per la compilazione bytecode (.pyo file iso .pyc).
compileallcartella sul mio sito-pacchetti e tutto ha rovinato tutto
È passato un po 'di tempo dall'ultima volta che ho usato Python, ma credo che tu possa usare py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pyce lo ottieni come valore di ritorno.
Ho trovato diversi modi per compilare script Python in bytecode
Usando py_compilenel terminale:
python -m py_compile File1.py File2.py File3.py ...
-m specifica il nome dei moduli da compilare.
Oppure, per la compilazione interattiva di file
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.Utilizzando py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')Utilizzando py_compile.main():
Compila diversi file alla volta.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
L'elenco può crescere fino a quando lo desideri. In alternativa, puoi ovviamente passare un elenco di file nei nomi dei file principali o addirittura negli argomenti della riga di comando.
Oppure, se passi ['-']in main, puoi compilare i file in modo interattivo.
Utilizzando compileall.compile_dir():
import compileall
compileall.compile_dir(direname)
Compila tutti i singoli file Python presenti nella directory fornita.
Utilizzando compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')Dai un'occhiata ai link qui sotto:
py_compilee compileallNON py_compile.pyo compileall.py. In altre parole, dovrebbe essere python3 -m py_compile PYTHON_FILENAMEo python3 -m compileall PYTHON_FILES_DIRECTORY.
Vorrei usare compileall . Funziona bene sia dagli script che dalla riga di comando. È un modulo / strumento di livello leggermente superiore rispetto al già citato py_compile che utilizza anche internamente.
compileallnon include la logica per saltare i file per i quali il .pycfile corrispondente è già aggiornato, vero?
compileallsalta i file che hanno già un aggiornamento .pyc(testato con Python 2.7.11)
python -m compileall <pythonic-project-name>
Il che rende compilare tutti .pyper .pycil progetto che conteneva le sottocartelle.
python3 -m compileall <pythonic-project-name>
che compila tutte .pyle __pycache__cartelle del progetto che contenevano le sottocartelle.
O con browning da questo post :
È possibile applicare lo stesso layout di
.pycfile nelle cartelle di Python2 usando:
python3 -m compileall -b <pythonic-project-name>L'opzione
-binnesca l'output dei.pycfile nelle loro posizioni legacy (cioè lo stesso di Python2).
Per soddisfare i requisiti della domanda originale (percorso di origine e percorso di destinazione), il codice dovrebbe essere simile al seguente:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
Se il codice di input presenta errori, viene sollevata l' eccezione py_compile.PyCompileError .
Se si utilizza la riga di comando, utilizzare python -m compileall <argument>per compilare il codice Python in codice binario Python. Ex:python -m compileall -x ./*
In alternativa, è possibile utilizzare questo codice per compilare la libreria in codice byte.
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)
consultare ☞ docs.python.org per una documentazione dettagliata