在过去的3-4个小时里,我一直试图将这个IronPython程序编译成一个工作的.exe而没有运气。
我正在使用“IronPython 2.6 for .NET 4.0”附带的pyc.py
D:\IronTestCompile>ipy pyc.py file1.py file2.py /out:Program /main:program.py /target:exe
程序编译成Program.dll& Program.exe但Program.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
cause am running IronPython 2.6 for .NET 4.0
我应该有更多.dll吗?我的IronPython程序使用System.Windows.Forms以及其他一些...
感谢您的帮助。
目标是编译这个程序并获取所有.DLL的zip文件,这样我的兄弟就可以解压缩&在他的comp上运行它,但截至目前我甚至无法在我自己的comp中运行它!有什么想法吗?
编辑:所以我弄清楚出了什么问题(请参阅下面的答案)但是现在我尝试在另一台计算机上运行应用程序时会看到这个可爱的弹出窗口:
Dang,现在我尝试在另一台机器上运行app时出现此错误。
要运行此应用程序,首先必须安装以下版本的.NET Framework之一:
v4.0.30319
想知道是否有办法解决这个问题。
编辑:我的修复是,我的兄弟有.NET 3.5所以我在另一台运行.NET 3.5的IronPython机器上重新编译它答案 0 :(得分:5)
是的,它成功编译了一个ran。
原因是我的来源中有未被捕获的例外。
由于某种原因,行
import traceback
import inspect
导致IronPython编译器抛出“ImportError”,但ipy.exe Program.py
运行正常。
当我尝试初始化System.Windows.Forms.WebBrowser()时,最大的错误是“ThreadStateException”错误(感谢Migol的提示)
用谷歌搜索,发现:哦,问题是pyc.py没有将线程标记为STA。
修复是:
您可以在mainMethod = ...
之后立即将此行添加到pyc.py.
mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()), System.Array[System.Byte](()))
来源:http://www.mail-archive.com/users@lists.ironpython.com/msg07725.html
甜。 :)
工作,编译和运行,结果“IronPython 2.6 for .NET 4.0”所需的唯一DLL是
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 - how to compile exe
结果证明您只需要在main:
文件中包含您导入的文件(我的是program.py。PYC.py
负责导入其余文件。:)
编辑:实际上你要将你要编译的所有.py添加到pyc.py命令中。如果你没有编译它(它将被合并到MyApp.dll中)你可以将.py保存在App的目录中它仍然会运行,但这会暴露它的来源。
希望这对某人有所帮助,带我整整一个晚上才弄明白。干杯。 =)
答案 1 :(得分:0)
您是否检查过目标计算机是否安装了.NET Framework 4.0?