setup pyton mac instal example python build setuptools distutils distribute

python - mac - pyton setup py



¿Cómo uso los datos en package_data del código fuente? (1)

La función get_data() del módulo pkgutil estándar calculará la ruta a sus datos, relativa a su paquete, y recuperará los datos por usted a través del cargador de módulos que Python utilizó para importar el paquete hermes :

import pkgutil data = pkgutil.get_data(''hermes'', ''templates/python.tpl'')

Por supuesto, en ciertos casos, simplemente puede leer sus datos utilizando una ruta calculada a partir de hermes.__file__ , pero si planea distribuir su proyecto, considere que puede instalarse de diferentes maneras en la máquina del usuario final: como archivos simples, implementados en un archivo comprimido con huevo comprimido, etc. En este último caso, Python habrá importado su módulo hermes mediante un zipimporter , lo que zipimporter que realice una open(path).read() normal:

>>> import hermes >>> hermes.__loader__ <zipimporter object "/home/pat/.cascade/virt/foo/lib/python2.6/site-packages/foo-0.0.0-py2.6.egg">

Si está de acuerdo con agregar una dependencia de tiempo de ejecución en la base de código de distribute , es posible que desee considerar el pkg_resources module , que le puede dar el mismo resultado pero agrega otras capacidades.

import pkg_resources data = pkg_resources.resource_string(''hermes'', ''templates/python.tpl'')

En setup.py, he especificado package_data como este:

packages=[''hermes''], package_dir={''hermes'': ''hermes''}, package_data={''hermes'': [''templates/*.tpl'']},

Y mi estructura de directorios es aproximadamente

hermes/ | | docs/ | ... | hermes/ | | __init__.py | code.py | templates | | python.tpl | | README | setup.py

El problema es que necesito usar archivos del directorio de plantillas en mi código fuente para poder escribir el código de Python (este proyecto es un generador de analizador). Parece que no puedo encontrar la forma de incluir y usar correctamente estos archivos de mi código. ¿Algunas ideas?