我有一个简单的IronPython脚本:
# Foo.py
import os
def main():
print( "Hello" )
if "__main__" == __name__:
main()
如果我用IronPython运行它,它会运行良好并打印Hello
ipy Foo.py
按照IronPython - how to compile exe中给出的说明,我使用以下命令将这个IronPython脚本编译为EXE:
ipy pyc.py /main:Foo.py /target:exe
执行Foo.exe会出现以下错误:
Unhandled Exception: IronPython.Runtime.Exceptions.ImportException: No module named os
at Microsoft.Scripting.Runtime.LightExceptions.CheckAndThrow(Object value)
at DLRCachedCode.__main__$1(CodeContext $globalContext, FunctionCode $functionCode)
at IronPython.Compiler.OnDiskScriptCode.Run()
at IronPython.Compiler.OnDiskScriptCode.Run(Scope scope)
at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptC
ode, ModuleOptions options)
为什么找不到模块“os”?如何解决这个问题,以便我可以得到一个工作的EXE?
(请注意,这与问题IronPython cannot import module os不同,因为如果我使用ipy.exe
运行脚本,则脚本可以正常工作。)
我知道这已经回答了很长一段时间,但它仍然花了我很多时间让我的exe工作。我指出了5条错误消息,其中有这个导入问题。这就是我要做的,使我的exe工作:
1)在部署文件夹(IronPython.dll、IronPython.Modules.dll等)中包含所有IronPython dll
2)在deploye文件夹中包含来自标准库的dll
3)exe所在的路径应该没有空间
(这: C: \User1\MyDocuments\My Folder\deployFolder
应更改为例如: C: \User1\MyDocuments\MyFolder\deployFolder)
4)您的操作系统可能会阻止exe文件使用的dll,并给您一个“loadfrommoteresource comutator error blablabla”。若要修复此问题,需要右键单击dll并在窗口的最后一行按“取消阻止”。
5)最后别忘了将pyc给出的dll文件包含在你的exe文件中(同名,只是扩展名不同)
这是我写的一篇文章,如果你需要的话,可以提供更多的细节:http://thesesergio.wordpress.com/2013/09/11/how-to-generate-and-use-a-exe-that-uses-net-dlls-with-ironpython-pyc-py/
构建一个可以分发的Ironpython EXE有点棘手,特别是在使用标准库的元素时。我的典型解决方案如下:
我将所需的所有stdlib模块复制到一个文件夹中(通常所有模块都只是为了完整起见),并使用此脚本构建我的exe。在本例中,我有两个文件FredMain.py和FredSOAP.py被编译成一个名为Fred_Download_Tool的EXE
在我的脚本中,当我准备编译时,我添加了以下内容。这允许程序使用来自我的DLL的标准模块,而不是Python安装。如果要分发给未安装Python的用户,这是必要的。创建安装程序时,请确保包含必要的DLL。
相关问题 更多 >
编程相关推荐