Один исполняемый файл с Py2Exe

Я пытаюсь сделать один исполняемый файл, и я приближаюсь. Пожалуйста, не рекомендуется использовать PyInstaller – я пробовал этот маршрут, спросил здесь , и добавил билеты. Он близок, но не совсем работает. Я теперь пытаюсь py2exe, и я тоже очень близко. В pyinstaller я могу создавать файлы ресурсов (который создает исполняемый файл с включенными файлами – я могу получить к ним доступ во временной папке).

Я хочу сделать то же самое для py2exe. У меня есть один исполняемый файл, но пять дополнительных папок (карты, mpl-данные, данные, фотографии и tcl). Я видел этот вопрос, но, похоже, не понимаю его и не должен работать. В моем основном файле py я использую PersistentDict(filepath) путь к файлу PersistentDict(filepath) котором мне нужен путь к файлу.

Мой вопрос состоит из двух частей: 1. Как получить файлы (файлы данных ниже), упакованные в исполняемый файл. 2. Как получить доступ к этим файлам в моем коде и вернуть их путь (в виде строки), например /temp/file1.jpg.

Вот мой код для моего установочного файла py2exe – обратите внимание, что у меня есть matplotlib и должен корректно включать mpl-data в мой исполняемый файл. Благодаря!

 from distutils.core import setup import py2exe import shutil import glob import matplotlib,six opts = {'py2exe': { "includes" : ["matplotlib.backends", "matplotlib.backends.backend_qt4agg", "matplotlib.figure","numpy", "six", "mpl_toolkits.basemap", "matplotlib.backends.backend_tkagg"], 'excludes': ['_gtkagg', '_tkagg','_agg2','_cairo', '_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo', 'tcl' ], 'dll_excludes': ['libgdk-win32-2.0-0.dll','w9xpopen.exe', 'libgobject-2.0-0.dll'], 'bundle_files': 1, 'dist_dir': "Dist Folder", 'compressed': True, } } data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')), (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']), (r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')), (r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')), (r'mpl-data\data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\data\*.*')), ('data', ['C:\\Users\\Me\\Documents\\Example_Json_File.json']), ('pics', ['C:\\Users\\Me\\Documents\\Example_Icon.ico', 'C:\\Users\\Me\\Documents\\Example_Jpg.jpg', ])] setup(windows=[{"script" : "MyMainScript.py", "data_files" : data_files, "icon_resources": [(1, 'C:\\Users\\Me\\Documents\\Example_Icon.ico')]}, ], version = "1.0", options=opts, data_files=data_files, zipfile = None, ) 

Гай объясняет, как упаковать в один файл с py2exe. Он не устанавливает пакеты внутри исполняемого файла.

Когда я упаковываю свои приложения, я не использую один исполняемый файл

 options = {"py2exe": {'bundle_files': 1, 'compressed': True}}, 

даже не потрудились поместить их в library.zip через

 options = {"py2exe": {"skip_archive":0}} 

Просто укажите несколько файлов pic, файлов данных, dll и т. Д. В одном каталоге. Затем создайте установщик, используя NSIS или установку Inno. Поскольку некоторые из моих приложений должны работать как службы, Inno заботился об этом. Самый большой плюс этого подхода, вам не нужно иметь дело с «замороженными» путями к вашим файлам, которые отличаются от ваших исходных путей.

В противном случае вам может потребоваться изменить код для обнаружения замороженных путей, например http://www.py2exe.org/index.cgi/WhereAmI

Я видел пакетный конвертер EXE (Advanced Batch to EXE Converter), но это странно: это позволит вам помещать файлы в каталог «bake», и ими можно управлять с помощью «% MYFILES% \ [путь] "каталог / переменная. Если у вас есть комната для маневра, проверьте это. Единственная проблема заключается в том, что он добавит в файл «intro» (чтение: прославленная флеш-анимация), и он отобразит FIRST. (Я против пиратства, но с ним все в порядке … «Вступление» – 45 секунд и неприятно.)

Если это вас не испугает, попробуйте сделать это.