libreria importar clases python distutils

libreria - importar clases en python



Encontrar un archivo en una distribución de módulo de Python (3)

Use pkgutil.get_data . Es el primo de pkg_resources.resource_stream , pero en la biblioteca estándar, y debe funcionar con instalaciones planas del sistema de archivos, así como paquetes comprimidos y otros importadores.

Escribí un paquete de Python que incluye una base de datos bsddb de valores precalculados para uno de los cálculos más lentos. Para simplificar, mi script de instalación instala el archivo de base de datos en el mismo directorio que el código que accede a la base de datos (en Unix, algo así como /usr/lib/python2.5/site-packages/mypackage/).

¿Cómo almaceno la ubicación final del archivo de la base de datos para que mi código pueda acceder a él? En este momento, estoy usando un hack basado en la variable __file__ en el módulo que accede a la base de datos:

dbname = os.path.join(os.path.dirname(__file__), "database.dat")

Funciona, pero parece ... hackish. ¿Hay una mejor manera de hacer esto? Me gustaría que el script de instalación simplemente tome la ubicación de instalación final del módulo de distutils y la rellene en un archivo "dbconfig.py" que se instala junto con el código que accede a la base de datos.


Esa es probablemente la forma de hacerlo, sin recurrir a algo más avanzado como usar setuptools para instalar los archivos a los que pertenecen.

Observe que hay un problema con este enfoque, porque en sistemas operativos con un marco de seguridad real (UNIXes, etc.), el usuario que ejecuta el script puede no tener los derechos para acceder al DB en el directorio del sistema donde se instala.


Intenta usar pkg_resources, que es parte de setuptools (y está disponible en todas las pitones a las que tengo acceso ahora mismo):

>>> import pkg_resources >>> pkg_resources.resource_ filename(__name__, "foo.config") ''foo.config'' >>> pkg_resources.resource_filename(''tempfile'', "foo.config") ''/usr/lib/python2.4/foo.config''

Hay más discusión sobre el uso de pkg_resources para obtener recursos en la página de huevos y en la página pkg_resources .

También tenga en cuenta que, de ser posible, es recomendable usar pkg_resources.resource_stream o pkg_resources.resource_string porque si el paquete es parte de un huevo, resource_filename copiará el archivo en un directorio temporal.