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 compileall
en 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 .
-O
bandera, para la compilación de bytecode (.pyo file iso .pyc).compileall
en 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.pyc
y se obtiene como valor de retorno.Encontré varias formas de compilar scripts de python en bytecode
Utilizando
py_compile
en terminal:-m
especifica 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_compile
ycompileall
NOpy_compile.py
ocompileall.py
. En otras palabras, debería serpython3 -m py_compile PYTHON_FILENAME
opython3 -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
compileall
no incluye lógica para omitir archivos para los que el.pyc
archivo correspondiente ya está actualizado, ¿verdad?compileall
omite 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
.py
a.pyc
en el proyecto que contiene las subcarpetas.En Python3 podrías usar:
lo que hace que compile todo
.py
en 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