Ответ 1
egg
файлы являются zip файлами, поэтому вы должны получить доступ к "материалам" внутри них с помощью zipfile модуля стандартных библиотек Python, не со встроенной функцией open
!
Это может быть странным требованием, но это то, с чем я столкнулся. Я погуглил, но ничего не дал.
Я пишу приложение, которое использует много константных атрибутов/значений, записанных в 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()
Любая идея?
egg
файлы являются zip файлами, поэтому вы должны получить доступ к "материалам" внутри них с помощью zipfile модуля стандартных библиотек Python, не со встроенной функцией open
!
Если вы хотите получить доступ к содержимому внутри .egg файла, вы можете просто переименовать его и изменить расширение с .egg на .zip и разархивировать его. Что создаст папку, и содержимое будет таким же, как и когда это был .egg файл
например brewer2mpl-1.4.1-py3.6.egg
После переименования brewer2mpl-1.4.1-py3.6.zip
Теперь, если мы откроем его, он будет легко распакован, и содержимое будет помещено в папку с тем же именем в том же каталоге. (проверено на macOS Sierra)
Да, можно читать файлы из файла яйца.
Файл яйца: структура mps-1.2.0_M2-py2.6.egg
для примера уровня модуля:
В 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)
PYTHONPATH=mps-1.2.0_M2-py2.6.egg python driverfile.py
просто используйте unzip file.egg, этого должно быть достаточно.
я думаю, что по умолчанию файл упаковки яиц под python не добавит ваш xml внутрь пакета