¿Cómo puedo generar manualmente un archivo .pyc desde un archivo .py?

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

  1. Usando py_compile.compile :

     import py_compile py_compile.compile('YourFileName.py') 
  2. 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.

  3. 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 . . . 
  4. Usando compileall.compile_dir() :

     import compileall compileall.compile_dir(direname) 

    Comstack todos los archivos de Python presentes en el directorio proporcionado.

  5. Usando compileall.compile_file() :

     import compileall compileall.compile_file('YourFileName.py') 

Echa un vistazo a los siguientes enlaces:

https://docs.python.org/3/library/py_compile.html

https://docs.python.org/3/library/compileall.html

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 .

En Python2 puedes usar:

 python -m compileall  

lo que hace que se compile todo .py a .pyc en el proyecto que contenía las subcarpetas.


En Python3 puedes usar:

 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).