Я работаю над упаковкой и распространением некоторых приложений Python в Windows, объединяя среду выполнения Python, пакеты Python для приложений и некоторые исполняемые файлы для запуска приложений Python.Подход заключается в том, чтобы просто изменить исходный код для python.exe для запуска приложений, но принять аргументы командной строки для таких вещей, как имена файлов данных.
Ниже приведен пример исходного кода C ++ для одного из исполняемых файлов:
// source for my_python_application1
#include "stdafx.h"
#include "Windows.h"
#include "Python.h"
wchar_t SWITCH[] = L"-m";
wchar_t APP[] = L"my_python_application1.main";
int wmain(int argc, wchar_t **argv) {
int newargc;
newargc = argc + 2;
// can use this to modify the PythonPath for specific distributions
// _putenv("PYTHONPATH=\"\"");
wchar_t **newargv = new wchar_t*[newargc];
newargv[0] = argv[0];
newargv[1] = SWITCH;
newargv[2] = APP;
for (int i = 1; i < argc; i++) {
newargv[i + 2] = argv[i];
}
return Py_Main(newargc, newargv);
// return Py_Main(argc, argv);
}
Функционально это позволяет достичь всего, что мне нужно для этого, но я страдаю от определенной природы ОКР, которая заставляет меня хотеть организовать вещи определенным образом.Я хотел бы иметь структуру, подобную следующей
/application_suite
/python_runtime
python.exe
python36.dll
(and everything else in a python dir)
/python_applications
my_python_application1.exe
my_python_application2.exe
Однако, поскольку mypythonapplication1/2.exe
- это в основном модифицированные файлы python.exe, чтобы они работали должным образом (загрузите DLL-файл python, модули импорта,получить доступ ко всем функциям наземных разметок, необходимых для соединения модулей), они должны быть расположены в каталоге / python_runtime.
Мне интересно, есть ли способ компилировать эти исполняемые файлы, чтобы их можно было расположить вструктура каталогов, которую я представил, но знаю, что они представляют собой каталог python_runtime и всю его структуру, расположенную в относительном пути «./python_runtime» или где-либо еще, так что все это ведет себя хорошо независимо от того, где конечный пользователь установил распределение приложений.