¿Cómo acceder a los archivos dentro de un archivo de huevo de Python?
egg (4)
Esto podría ser un requisito extraño pero es lo que me he encontrado. Busqué en Google pero no cedo nada.
Estoy codificando una aplicación que usa muchos atributos / valores constantes grabados en un archivo XML (no cambiarán, por lo que se trata de un archivo estático), las cosas funcionan bien hasta que generé un archivo egg para ello.
Cuando la lógica alcanza la parte de acceso a XML, recibí una queja como esta: /home/Workspace/my_proj/dist/mps-1.2.0_M2-py2.6.egg/mps/par/client/syntax/syntax.xml
En realidad, he incluido el archivo XML en la ruta anterior, pero parece que Python no sabe cómo acceder a él.
El código para acceder al XML es como ...
file_handler = open(path_to_the_file)
lines = file_handler.read().splitlines()
¿Alguna idea?
Accede al archivo desde dentro del archivo egg
Sí, es posible leer los archivos desde dentro del archivo egg.
Archivo de Egg: estructura mps-1.2.0_M2-py2.6.egg
para el ejemplo a nivel de módulo:
En driverfile.py
:
import xml.etree.ElementTree
import mps.par.client as syntaxpath
import os
path = os.path.dirname(syntaxpath.__file__)
element = xml.etree.ElementTree.parse(path+''//syntax//syntax.xml'').getroot()
print(element)
Lea el archivo XML desde el interior de un archivo de huevo:
PYTHONPATH=mps-1.2.0_M2-py2.6.egg python driverfile.py
Si desea acceder al contenido dentro del archivo .egg, simplemente puede cambiarle el nombre y cambiar la extensión de .egg a .zip y luego descomprimirlo. Lo que creará una carpeta y el contenido será el mismo que cuando era un archivo .egg
por ejemplo, brewer2mpl-1.4.1-py3.6.egg
Después de cambiar el nombre de brewer2mpl-1.4.1-py3.6.zip
Ahora, si lo abrimos, se descomprimirá fácilmente y el contenido se colocará en una carpeta con el mismo nombre en el mismo directorio. (probado en macOS Sierra)
solo usa unzip file.egg esto debería ser suficiente.
egg
archivos egg
son archivos zip, por lo que debes acceder a "cosas" dentro de ellos con el módulo zipfile de las bibliotecas estándar de Python, ¡ no con la función de open
incorporada!