Respuestas:
Puedes usar compileallen la terminal. El siguiente comando irá recursivamente en subdirectorios y creará archivos pyc para todos los archivos python que encuentre. El módulo compileall es parte de la biblioteca estándar de python, por lo que no necesita instalar nada adicional para usarlo. Esto funciona exactamente de la misma manera para python2 y python3.
python -m compileall .
-Obandera, para la compilación de bytecode (.pyo file iso .pyc).
compileallen mi carpeta de paquetes de sitio y lo estropeó todo
Ha pasado un tiempo desde la última vez que usé Python, pero creo que puedes usar py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycy se obtiene como valor de retorno.
Encontré varias formas de compilar scripts de python en bytecode
Utilizando py_compileen terminal:
python -m py_compile File1.py File2.py File3.py ...
-m especifica el nombre del módulo (s) que se compilará.
O, para la compilación interactiva de archivos
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.Utilizando py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')Utilizando py_compile.main():
Compila varios archivos a la vez.
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
La lista puede crecer todo el tiempo que desee. Alternativamente, obviamente puede pasar una lista de archivos en los nombres de archivo principal o incluso en los argumentos de la línea de comandos.
O, si pasa ['-']en main, puede compilar archivos interactivamente.
Utilizando compileall.compile_dir():
import compileall
compileall.compile_dir(direname)
Compila todos los archivos Python presentes en el directorio suministrado.
Utilizando compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')Echa un vistazo a los enlaces a continuación:
py_compiley compileallNO py_compile.pyo compileall.py. En otras palabras, debería ser python3 -m py_compile PYTHON_FILENAMEo python3 -m compileall PYTHON_FILES_DIRECTORY.
Yo usaría compileall . Funciona bien tanto desde scripts como desde la línea de comandos. Es un módulo / herramienta de nivel un poco más alto que la ya mencionada py_compile que también usa internamente.
compileallno incluye lógica para omitir archivos para los que el .pycarchivo correspondiente ya está actualizado, ¿verdad?
compileallomite archivos que ya tienen una versión actualizada .pyc(probado con Python 2.7.11)
python -m compileall <pythonic-project-name>
lo que hace la compilación de toda .pya .pycen el proyecto que contiene las subcarpetas.
python3 -m compileall <pythonic-project-name>
lo que hace que compile todo .pyen las __pycache__carpetas del proyecto que contenían las subcarpetas.
O con el dorado de esta publicación :
Puede aplicar el mismo diseño de
.pycarchivos en las carpetas que en Python2 usando:
python3 -m compileall -b <pythonic-project-name>La opción
-bactiva la salida de.pycarchivos a sus ubicaciones heredadas (es decir, lo mismo que en Python2).
Si está utilizando la línea de comando, use python -m compileall <argument>para compilar código python en código binario python. Ex:python -m compileall -x ./*
O bien, puede usar este código para compilar su biblioteca en código de bytes.
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)
mire ☞ docs.python.org para obtener documentación detallada