Я пытался создать один исполняемый файл, и я приближаюсь. Пожалуйста, не рекомендуйте использовать PyInstaller - я пробовал этот маршрут, спросил на SO here и отправил билеты. Он близок, но не совсем работает. Я теперь пытаюсь py2exe, и я тоже очень близко. В pyinstaller я могу создавать файлы ресурсов (который создает исполняемый файл с включенными файлами - я могу получить к ним доступ во временной папке).Один исполняемый файл с Py2Exe
Я хочу сделать то же самое для py2exe. У меня есть один исполняемый файл, но пять дополнительных папок (карты, mpl-данные, данные, фотографии и tcl). Я видел это question, но, похоже, не понимаю его и не заработал. В моем основном файле py я использую PersistentDict(filepath)
, где мне нужен путь к файлу.
Мой вопрос состоит из двух частей: 1. Как получить файлы (файлы данных ниже), упакованные в исполняемый файл. 2. Как получить доступ к этим файлам в моем коде и вернуть их путь (в виде строки), например /temp/file1.jpg.
Вот мой код для моего установочного файла py2exe - обратите внимание, что у меня есть matplotlib и должен корректно включать mpl-данные в мой исполняемый файл. Благодаря!
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,
)
Вы пробовали [IExpress] (https://en.wikipedia.org/wiki/IExpress)? Он был первоначально разработан для установки драйверов устройств и IE 6 (содрогание), но я злоупотреблял им раньше для вашего примера использования. –
Я не думаю, что это то, что я хочу. Я использую Inno Setup, который похож на этот. Когда я передаю исполняемый файл (или установщик) другому пользователю, я хочу, чтобы у них был только исполняемый файл - нет связанных с ним файлов, которые они могли видеть/изменять (таким образом, файлы встроены в исполняемый файл). – mcfly
Итак, что именно вы хотите выполнить исполняемый файл? Вы хотите, чтобы: 1) извлечь себя во временную папку, 2) запустить вашу программу, 3) когда программа закончится, удалите временные файлы? Это то, что делает IExpress. –