comstackr el archivo .py de Python sin ejecutar

¿Hay una manera de comstackr un archivo .py de Python desde la línea de comandos sin ejecutarlo?

Estoy trabajando con una aplicación que almacena sus extensiones de python en una ruta no estándar con permisos limitados y me gustaría comstackr los archivos durante la instalación. No necesito la sobrecarga de Distutils.

El módulo py_compile proporciona una función para generar un archivo de código de byte a partir de un archivo de origen, y otra función utilizada cuando el archivo de origen del módulo se invoca como un script.

python -m py_compile fileA.py fileB.py fileC.py 

Sí, hay módulo compileall:

http://docs.python.org/library/compileall.html#module-compileall

Aquí hay un ejemplo que comstack todos los archivos .py en un directorio (pero no subdirectorios)

 python -m compileall -l myDirectory 

De hecho, si está en Linux, es posible que ya tenga un comando /usr/bin/py_compilefiles en su PATH. Envuelve el módulo py_compile mencionado por otras personas. Si no estás en Linux, aquí está el código del script .

$ python -c "import py_compile; py_compile.compile('yourfile.py')"

o

$ python -c "import py_compile; py_compile.compileall('dir')"

Yo diría algo como esto, para que pueda comstackrlo en la ubicación elegida:

 import py_compile py_compile(filename+".py",wantedlocation+wantedname+".pyc") 

Como lo he hecho ahora en mi proyecto Python en github.com/lolexorg/Lolex-Tools

Además de elegir la ubicación de salida de pyc (según la respuesta de @Jensen Taylor), también puede especificar el nombre del archivo fuente que desee para el rastreo si no desea que se escriba la ruta absoluta del archivo py en el pyc:

python -c "import py_compile; py_compile.compile('src.py', 'dest.pyc', 'whatever_you_like')"

Aunque “compileall -d destdir” también puede hacer el truco, a veces limitará su directorio de trabajo. Por ejemplo, si desea que el nombre del archivo fuente en pyc sea “./src.py”, debe mover el directorio de trabajo a la carpeta de src.py, lo cual no es deseable en algunos casos, luego ejecute algo como “python -m compileall -d ./. ”