Por alguna razón, no puedo depender de la declaración de "importación" de Python para generar el archivo .pyc automáticamente
¿Hay alguna manera de implementar una función de la siguiente manera?
def py_to_pyc(py_filepath, pyc_filepath):
...
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ó todoPuede compilar archivos individuales desde la línea de comandos con:
fuente
Ha pasado un tiempo desde la última vez que usé Python, pero creo que puedes usar
py_compile:fuente
__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:-mespecifica el nombre del módulo (s) que se compilará.O, para la compilación interactiva de archivos
Utilizando
py_compile.compile:Utilizando
py_compile.main():Compila varios archivos a la vez.
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():Compila todos los archivos Python presentes en el directorio suministrado.
Utilizando
compileall.compile_file():Echa un vistazo a los enlaces a continuación:
https://docs.python.org/3/library/py_compile.html
https://docs.python.org/3/library/compileall.html
fuente
py_compileycompileallNOpy_compile.pyocompileall.py. En otras palabras, debería serpython3 -m py_compile PYTHON_FILENAMEopython3 -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.
fuente
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)En Python2 podrías usar:
lo que hace la compilación de toda
.pya.pycen el proyecto que contiene las subcarpetas.En Python3 podrías usar:
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 :
fuente
Para que coincida con los requisitos de la pregunta original (ruta de origen y ruta de destino), el código debería ser así:
Si el código de entrada tiene errores, se genera la excepción py_compile.PyCompileError .
fuente
Hay dos formas de hacer esto.
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.
mire ☞ docs.python.org para obtener documentación detallada
fuente