2009-03-04 12 views
14

Duplicar posible:
Way to have compiled python files in a separate folder?¿Pueden generarse archivos de código de bytes compilados (.pyc) en un directorio diferente?

Cuando pitón compila módulos de código de bytes, se produce .pyc archivos de sus archivos .py.

Mi pregunta es, ¿es posible tener estos archivos .pyc escritos en un directorio diferente de donde reside el módulo?

Por ejemplo, tengo un gran directorio de módulos. En lugar de tenerlo lleno de archivos .pyc, me gustaría mantener mi código fuente en el directorio y tener un subdirectorio como "bytecode" donde están almacenados todos los .pyc.

¿Esto es posible?

+0

Si no es así con el pitón en sí, entonces se podría escriba un script de shell para hacer esto con find, xargs y move. –

Respuesta

14

Esto se responde en "Way to have compiled python files in a seperate folder?"

Respuesta corta: No - a menos que esté ejecutando Python 3.2 o posterior - vea here.

Para aclarar: Antes de 3,2, que puede compilar código de bytes y ponerlo en otro lugar según la sugerencia de Brian R. Bondy, pero a menos que realmente ejecutarlo desde allí (y no de la carpeta que desea mantener prístina) Python todavía muestra bytecode donde están los archivos .py.

+0

Mejor respuesta: Simplemente funciona en 3.2 o superior. No antes. Esta pregunta es un duplicado; sigue el enlace de arriba –

0

Me parece recordar haber leído en alguna parte que esto no es posible y que la gente de Python tiene razones para no hacerlo posible, aunque no recuerdo dónde.

EDIT: lo siento, leí mal la pregunta - lo que quise decir es que no es posible (creo) configurar el ejecutable de Python para poner sus archivos de código de bytes en un directorio diferente de forma predeterminada. Siempre puedes escribir un pequeño script de compilación de Python (o encontrar uno, estoy seguro de que están ahí) que pondría los archivos de código de bytes en la ubicación que elijas.

7

Comprobar la py_compile module, y en particular:

py_compile.compile(file[, cfile[, dfile[, doraise]]]) 

El cfile es el parámetro que está interesado en

Desde el enlace de arriba:.

... El de byte el código se escribe en cfile, que se predetermina en el archivo + 'c' ...

0

Puede escribir un script para compilarlos y luego moverlos. Algo así como:

for i in `ls *.pyc` 
do 
mv $i $DEST_DIR 
done 

(que puede ser acortado a:

for i in *.pyc 
do 
    mv $i $DEST_DIR 
done 

o, sorprendentemente, a

mv *.pyc $DEST_DIR 

)

+0

Agregué dos versiones más de tu código, aunque creo que su funcionalidad es equivalente a 'rm * .pyc': los archivos compilados se pueden mover; ¿Y qué? – tzot

2

En caso de que la "basura" de hecho es su problema, siempre se puede empacar .py, .pyc y/o .pyo archivos en un archivo .zip y añadirlo a tu sys.path.

3

Estaba buscando una respuesta a esto yo mismo, y no pude encontrar demasiado. Sin embargo sólo se puede prefijar el nombre de la carpeta al nombre del archivo recién compilado (necesidad de hacer existe primero asegurarse de carpeta)

Aquí hay un código que funciona para mí:

import py_compile 
import os 
import glob 
import shutil 

path = '' 
for infile in glob.glob(os.path.join(path, '*.py')): 
    print "current file is: " + infile 
    strDestination = 'compiled/' + infile + 'c' 
    py_compile.compile(infile,strDestination) 
Cuestiones relacionadas