2009-11-13 16 views
9

Estoy desarrollando un huevo de Python que tiene varias dependencias .txt (son plantillas usadas para generar archivos por el huevo en sí), y estoy luchando para obtener esas dependencias copiadas en site-packages durante setup.py install. De acuerdo con la distribute documentation ...Recursos de empaquetado con setuptools/distribute

sistema de archivos de mi paquete:

setup.py 
package 
|--- __init__.py 
|--- main.py 
|--- binary (calls main.py with pkg_resources.load_entry_point) 
|--- templates 
    |--file1.txt 
    |--file2.txt 

En setup.py:

setup(
    [...] 
    eager_resources = ['templates/file1.txt', 'templates/file2.txt'] 
) 

Dentro de mi paquete:

from pkg_resources import resource_string 
tpl = resource_string(__name__, 'templates/file1.txt') 

... esta combinación de configuración y sistema de archivos debería dar como resultado que file1.txt y file2.txt estén disponibles a través de pkg_resources.resource_string. Lamentablemente, no se copian en site-packages durante setup.py install. ¿Qué me estoy perdiendo?

Gracias!

Respuesta

4

¿Has mirado en la documentación setuptools para la inclusión de los datos del paquete aquí: http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

Básicamente, sólo tiene que establecer include_package_data=True en su archivo setup.py. Si está utilizando subversion o CVS, se incluirán todos los archivos versionados. De lo contrario, puede especificar qué archivos incluir con un archivo MANIFEST.in.

Creo que la distribución admite esto también.

A continuación, puede acceder a los archivos como lo haría sin que estén empaquetados. es decir, en main.py podría tener:

import os.path 
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt')) 
print f.read() 
f.close() 

y esto también funcionaría en la versión empaquetada. Una advertencia es que también deberá establecer zip_safe = False en setup.py para que todos los archivos se descompriman durante la instalación.

+0

Excelente, gracias por la ayuda. ¿Le importaría aclarar la diferencia entre "archivos de datos" y "recursos", tal como se define en la documentación de setuptools a la que se vinculó? Estaba siguiendo las instrucciones de recursos, pero parecen ser cualitativamente diferentes. ¡Gracias! –

+0

Bueno, su pregunta fue la primera vez que me encontré con los "recursos", así que también tengo curiosidad por saber para qué sirven. Pero los archivos de datos definitivamente son el camino a seguir para cosas como plantillas. – pcardune

+8

Tenga en cuenta que no necesita usar zip_safe = False. En su lugar, use pkg_resources.resource_stream ('packagename', 'templates/file1.txt'). Read() y setuptools obtendrá la transmisión por usted desde el sistema de archivos o desde el huevo comprimido. –

Cuestiones relacionadas