Как получить доступ к файлам внутри файла яйца Python?

Это может быть странным требованием, но это то, с чем я столкнулся. Я погуглил, но ничего не дал.

Я пишу приложение, которое использует много константных атрибутов/значений, записанных в XML файле (они не будут меняться, как статический файл), все работает нормально, пока я не сгенерирую для него файл egg.

Когда логика достигает части доступа к XML, я получил одну жалобу, подобную этой: /home/Workspace/my_proj/dist/mps-1.2.0_M2-py2.6.egg/mps/par/client/syntax/syntax.xml

На самом деле я упаковал XML файл по указанному выше пути, но, похоже, Python не знает, как получить к нему доступ.

Код для доступа к XML как...

file_handler = open(path_to_the_file)
lines = file_handler.read().splitlines()

Любая идея?

Ответ 1

egg файлы являются zip файлами, поэтому вы должны получить доступ к "материалам" внутри них с помощью zipfile модуля стандартных библиотек Python, не со встроенной функцией open!

Ответ 2

Если вы хотите получить доступ к содержимому внутри .egg файла, вы можете просто переименовать его и изменить расширение с .egg на .zip и разархивировать его. Что создаст папку, и содержимое будет таким же, как и когда это был .egg файл

например brewer2mpl-1.4.1-py3.6.egg
После переименования brewer2mpl-1.4.1-py3.6.zip

Теперь, если мы откроем его, он будет легко распакован, и содержимое будет помещено в папку с тем же именем в том же каталоге. (проверено на macOS Sierra)

Ответ 3

Доступ к файлу из файла яйца

Да, можно читать файлы из файла яйца.

Файл яйца: структура mps-1.2.0_M2-py2.6.egg для примера уровня модуля:

mps-1.2.0_M2-py2.6.egg image

В 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)

Прочитайте файл xml из файла eggfile:

PYTHONPATH=mps-1.2.0_M2-py2.6.egg python driverfile.py

Ответ 4

просто используйте unzip file.egg, этого должно быть достаточно.

Ответ 5

я думаю, что по умолчанию файл упаковки яиц под python не добавит ваш xml внутрь пакета