Как получить доступ к файлам внутри файла яйца Python? - PullRequest
19 голосов
/ 07 сентября 2010

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

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

Когда логика достигает части доступа к 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()

Есть идеи?

Ответы [ 5 ]

12 голосов
/ 07 сентября 2010
Файлы

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

6 голосов
/ 25 марта 2017

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

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

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

1 голос
/ 03 мая 2018

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

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

Файл яйца: 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 из файла яйца:

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

0 голосов
/ 26 апреля 2019

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

0 голосов
/ 23 февраля 2018

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

...