Por alguna razón, no puedo depender de la statement de “importación” de Python para generar el archivo .pyc automáticamente
¿Hay alguna manera de implementar una función como sigue?
def py_to_pyc(py_filepath, pyc_filepath): ...
Puedes usar compileall en el terminal. El siguiente comando irá recursivamente a los 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 .
Puede comstackr archivos individuales desde la línea de comandos con:
python -m compileall .py .py
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")
Encontré varias formas de comstackr scripts de Python en un bytecode
Usando py_compile.compile
:
import py_compile py_compile.compile('YourFileName.py')
Usando py_compile.main()
:
Comstack varios archivos a la vez.
import py_compile py_compile.main(['File1.py','File2.py','File3.py'])
La lista puede crecer tanto como desee. Como alternativa, obviamente puede pasar una lista de archivos en los nombres de los archivos principales o incluso en los argumentos de la línea de comandos.
O, si pasa ['-']
en main, entonces puede comstackr archivos de manera interactiva.
Usando py_compile
en terminal:
python -m py_compile File1.py File2.py File3.py ...
-m
especifica el nombre del módulo (s) a comstackr.
O bien, para la comstackción interactiva de archivos.
python -m py_compile - File1.py File2.py File3.py . . .
Usando compileall.compile_dir()
:
import compileall compileall.compile_dir(direname)
Comstack todos los archivos de Python presentes en el directorio proporcionado.
Usando compileall.compile_file()
:
import compileall compileall.compile_file('YourFileName.py')
Echa un vistazo a los siguientes enlaces:
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 el ya mencionado py_compile que también usa internamente.
Para cumplir los requisitos de la pregunta original (ruta de origen y ruta de destino), el código debería ser así:
import py_compile py_compile.compile(py_filepath, pyc_filepath)
Si el código de entrada tiene errores, se genera la excepción py_compile.PyCompileError .
python -m compileall
lo que hace que se compile todo .py
a .pyc
en el proyecto que contenía las subcarpetas.
python3 -m compileall
lo que hace que compile todas las carpetas .py
a __pycache__
en el proyecto que contenía las subcarpetas.
O con el dorado de este post :
Puede imponer el mismo diseño de archivos
.pyc
en las carpetas que en Python2 usando:
python3 -m compileall -b
La opción -b activa la salida de los archivos
.pyc
a sus ubicaciones heredadas (es decir, la misma que en Python2).