IronPython -> .exe Исполняемый файл и распространять со всеми DLL ПОМОГИТЕ - PullRequest
3 голосов
/ 20 сентября 2010

Безуспешно пытался скомпилировать эту программу IronPython в работающий .exe в течение последних 3-4 часов.

Я использую pyc.py, поставляемый с "IronPython 2.6 для .NET 4.0"

D:\IronTestCompile>ipy pyc.py file1.py file2.py /out:Program /main:program.py /target:exe

Программа компилируется в Program.dll и Program.exe, но Program.exe не запускается.

Я использую это как руководство:

IronPython - как скомпилировать exe

Очень простая программа «HelloWorld», которую я получил, но моя более сложная программа не удалась.Я думаю, что моя сложная программа не может работать как скомпилированная, потому что в ней отсутствуют DLL?

Из каталога IronPython я скопировал все необходимые библиотеки DLL (Microsoft * .dll, IronPython * .dll), которые необходимы дляКомпиляция и как предварительное условие для запуска скомпилированного HelloWorld.exe.

Как узнать, почему мой .exe не запускается?Или как определить, какие файлы .NET DLL необходимо включить в каталог?(Предполагая, что мне нужно поместить все .NET DLL в пример каталога .exe C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll -> D:\IronTestCompile?)

Единственные библиотеки DLL, которые у меня есть в каталоге программ:

Microsoft.Scripting.dll
IronPython.dll
IronPython.Modules.dll
Microsoft.Dynamic.dll

Я неимеют Microsoft.Scripting.Core.dll или Microsoft.Scripting.ExtensionAttribute.dll , потому что я использую IronPython 2.6 для .NET 4.0

Должен ли я иметь больше .dll?Моя программа IronPython использует System.Windows.Forms, а также множество других ...

Спасибо за любую помощь.

Цель - скомпилировать эту программу и получить все файлы .DLL в zip-файле.так что мой брат может разархивировать и запустить его на своем компе, но сейчас я даже не могу запустить его на своем собственном компе!Любые идеи?


РЕДАКТИРОВАТЬ : Итак, я понял, что было не так (см. Мой ответ ниже) Но теперь я получаю это прекрасное всплывающее окно при попытке запустить приложение на другомкомпьютер:

Черт, теперь я получаю эту ошибку при попытке запустить приложение на другом компьютере.


MyApp.exe - Ошибка инициализации .NET Framework

Для запускаДля этого приложения сначала необходимо установить одну из следующих версий .NET Framework:

v4.0.30319

Обратитесь к издателю приложения за инструкциями по получению соответствующей версии .NET Framework.

ОК

Интересно, есть ли способ обойти это.

РЕДАКТИРОВАТЬ: Мое исправление было, у моего брата был .NET 3.5, поэтому я перекомпилировал его на другоймашина с установленным IronPython .NET 3.5

Ответы [ 2 ]

5 голосов
/ 20 сентября 2010

Да, он успешно скомпилирован и запущен.

Причина в том, что в моем источнике были непонятные исключения.

Почему-то строки

import traceback
import inspect

Заставил IronPython Compiler выдавать «ImportError», но ipy.exe Program.py работает нормально.

Также самой большой ошибкой была ошибка «ThreadStateException» (спасибо Migol за подсказку), когда я пытался инициализировать System.Windows.Forms.WebBrowser ()

Погуглил и обнаружил, что:

О, проблема в том, что pyc.py не помечает поток как STA.

И исправление:

Вы можете добавить эту строку в pyc.py сразу после mainMethod = ...

mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()), System.Array[System.Byte](()))

источник: http://www.mail-archive.com/users@lists.ironpython.com/msg07725.html

Сладкое. :)

Работает, компилируется и запускается. Оказывается, единственные библиотеки DLL, которые вам нужны для "IronPython 2.6 для .NET 4.0", являются

IronPython.dll
IronPython.Modules.dll
Microsoft.Scripting.dll
Microsoft.Dynamic.dll
Mycrosoft.Scripting.Debugging.dll

(просто скопируйте и вставьте их из каталога C:\Program Files\IronPython 2.6 for .NET 4.0\ или где бы вы не установили IronPython)

Также точная команда, которую я использовал для компиляции моего скрипта:

D:\IronTestCompile\project_3>"c:\Program Files\IronPython 2.6 for .NET 4.0\ipy.exe" pyc.py Form1.py utils.py project.py /out:MyApp /main:program.py /target:winexe

следуйте этому руководству IronPython - как скомпилировать exe

оказывается, что вам нужно только включить файлы, которые вы импортируете, в ваш файл main: (у меня был program.py. PYC.py заботится об импорте остальных.:)

edit: На самом деле вы бы добавили все .py, которые вы хотите скомпилировать, в команду pyc.py. Если вы не скомпилируете его (он будет объединен в MyApp.dll), вы можете сохранить .py в каталоге приложения, и он все равно будет работать, но тогда это обнаружит его источник.

Надеюсь, это кому-нибудь поможет, у меня ушел целый вечер, чтобы понять это. Приветствия. =) * * Тысяча пятьдесят-две

0 голосов
/ 20 сентября 2010

Вы проверили, что на целевом компьютере установлен .NET Framework 4.0?

...