py2exe gtk выполнять скрипты из каталога

Привет, я создаю простое приложение, в котором будет поле со списком для выбора сценариев Python, которые находятся в каталоге, называемом сценариями, для создания отчетов по базе данных. Я собирался использовать py2exe для сборки программы, чтобы пользователям не нужно было устанавливать python и субмодули.

Итак, как мне заставить программу запускать эти сценарии с помощью дистрибутива py2exe?

я думал об использовании системы («команда») и копировании python.exe из моего каталога установки, чтобы просто запустить систему (os.curdir + 'python.exe ' + script_to_run), python.exe затем будет использовать локальную копию python. dll и библиотеки, необходимые для запуска, которые будут просто reportlab и pyobdc

это сработает или есть способ лучше?

(я также был бы не против построить его на железном питоне, если бы это было проще)


person Cory    schedule 04.02.2011    source источник


Ответы (1)


У Майкла Фурда есть следующий пример для встраивания Ironpython из Ironpython.

Основные шаги заключаются в создании вашего приложения оболочки. Для действительно облегченного графического интерфейса есть EasyWPF. Используйте pyc для компиляции вашего скрипта в exe и стандартной библиотеки в DLL. В зависимости от того, нужно ли вам захватывать стандартный вывод из сценариев или передавать в них переменные в информации, все может усложниться, как указано в статье. Базовый пример приведен ниже.

import clr
clr.AddReference('IronPython')
clr.AddReference('System')
clr.AddReference('mscorlib')
clr.AddReference('Microsoft.Scripting')
clr.AddReference('MyStandardLib')
#Now you can reference things like 'import lxml as L .....

from IronPython.Hosting import Python
from Microsoft.Scripting import SourceCodeKind

spath = "C:/fred.py"  # Path to script


engine = Python.CreateEngine()
#Now add your assemblies (like the standard library) to the engine
for assembly in clr.References:
    runtime.LoadAssembly(assembly)

source = engine.CreateScriptSourceFromFile(spath, SourceCodeKind.Statements)
mod = engine.CreateScope()
runtime = engine.Runtime

source.Execute(mod)
person WombatPM    schedule 04.02.2011