Py2exe:Встраивать статические файлы в сам файл library.zip или exe и получать к ним прозрачный доступ во время выполнения
Вопрос
Есть ли способ заставить py2exe встраивать статические файлы (и / или подкаталоги статических файлов) в library.zip и / или сам exe-файл (с zipfile= None), а затем прозрачно получить доступ к этим встроенным статическим файлам из кода во время выполнения?
Спасибо тебе, Малкольм
Решение
Похоже, это именно тот рецепт, который вам нужен: Расширьте py2exe для копирования файлов в zip-файл, куда pkg_resources может их загружать
Эффективное использование этого, вероятно, требует некоторых знаний о pkg_ресурсы который связан с (частью) инструменты настройки, откуда берутся "Яйца питона".
Другие советы
Просто подумал, что я бы поделился этим и здесь в интересах тех, кто все еще ищет ответы:
Py2exe:Встраивайте статические файлы в сам exe-файл и получайте к ним доступ
К сожалению, py2exe изменил способ работы своего модуля, поэтому в приведенном примере здесь больше не работает.
Я смог сделать это, переопределив одну из функций py2exe, а затем просто вставив их в почтовый файл, созданный py2exe.
Вот пример:
import py2exe
import zipfile
myFiles = [
"C:/Users/Kade/Documents/ExampleFiles/example_1.doc",
"C:/Users/Kade/Documents/ExampleFiles/example_2.dll",
"C:/Users/Kade/Documents/ExampleFiles/example_3.obj",
"C:/Users/Kade/Documents/ExampleFiles/example_4.H",
]
def better_copy_files(self, destdir):
"""Overriden so that things can be included in the library.zip."""
#Run function as normal
original_copy_files(self, destdir)
#Get the zipfile's location
if self.options.libname is not None:
libpath = os.path.join(destdir, self.options.libname)
#Re-open the zip file
if self.options.compress:
compression = zipfile.ZIP_DEFLATED
else:
compression = zipfile.ZIP_STORED
arc = zipfile.ZipFile(libpath, "a", compression = compression)
#Add your items to the zipfile
for item in myFiles:
if self.options.verbose:
print("Copy File %s to %s" % (item, libpath))
arc.write(item, os.path.basename(item))
arc.close()
#Connect overrides
original_copy_files = py2exe.runtime.Runtime.copy_files
py2exe.runtime.Runtime.copy_files = better_copy_files