ironpython怎么编译_将IronPython WPF项目编译为

本文讨论了如何将IronPython WPF项目打包成单一的.exe文件,以便于部署。作者尝试使用clr.CompileModules()和pyc.py,但遇到了文件包含和包结构的问题。他们希望找到一种方法,能将所有依赖项合并到一个可执行文件中,同时保持项目中的包层次结构。目前,解决方案仍然不完善,作者正在寻找能够读取.pyproj文件并生成完整可执行文件的工具或方法。
摘要由CSDN通过智能技术生成

打包IronPython应用程序进行部署的最佳方法是什么?在搜索完网页之后,我想到的最好的办法(以及我目前正在做的)是使用clr.CompileModules()将整个项目的.py文件粘合到一个.dll中,然后使用一个run.py来运行该dll:import clr

clr.AddReference('compiledapp.dll')

import app

不过,这还不是最理想的,因为这意味着我必须分发3个文件(.dll、.xaml和run.py启动程序)

在主机上安装IronPython

另外,这感觉太。。。hacky,在IronPython与Visual Studio 2010完美集成之后。我完全搞不懂为什么IPy应用程序没有集成的构建系统,不管怎么说都归结为IL。

理想情况下,我希望能够有一个单独的.exe,其中.xaml以某种方式合并在内部(我读到C#apps将XAML编译成BAML并将它们合并到可执行文件中),并且不需要安装IronPython就可以运行。这至少有一半的可能吗?(我想如果exe需要一些额外的.DLLs或者其他东西,这是可以的。重要的是它是.exe格式的。)

一些编辑澄清了:我已经尝试了pyc.py,但似乎不承认我的项目不仅仅是app.py。它生成的exe的大小表明它只是“编译”app.py,而没有将任何其他文件包含到exe中。那么,如何告诉它编译我项目中的每个文件?

编辑二:不幸的是,唯一的方法是使用pyc.py并将每个文件作为参数传递给它。对于这种方法,我有两个问题:如何处理这么大的命令行?一个命令最多可包含256个字符。

pyc.py如何知道如何保留包/文件夹结构?如上面的项目截图所示,我编译的程序如何知道访问子文件夹中的模块,例如访问DT\Device?层次结构是否以某种方式“保留”在dll中?

Edit I I I:由于通过命令行将70个文件名传递给pyc.py将非常困难,为了更优雅地构建IPy项目,我决定增加pyc.py。

我添加了通过/pyproj:参数读取.pyproj文件的代码,解析XML,并从中获取项目中使用的py文件列表。这一直工作得很好;但是,生成的可执行文件似乎无法访问作为我项目一部分的python子包(子文件夹)。我的pyc.py版本和我的.pyproj阅读支持补丁可以在这里找到:http://pastebin.com/FgXbZY29

当这个新的pyc.py在我的项目上运行时,这是输出:c:\Projects\GenScheme\GenScheme>"c:\Program Files (x86)\IronPython 2.7\ipy.exe"

pyc.py /pyproj:GenScheme.pyproj /out:App /main:app.py /target:exe

Input Files:

c:\Projects\GenScheme\GenScheme\__init__.py

c:\Projects\GenScheme\GenScheme\Agent.py

c:\Projects\GenScheme\GenScheme\AIDisplay.py

c:\Projects\GenScheme\GenScheme\app.py

c:\Projects\GenScheme\GenScheme\BaseDevice.py

c:\Projects\GenScheme\GenScheme\BaseManager.py

c:\Projects\GenScheme\GenScheme\BaseSubSystem.py

c:\Projects\GenScheme\GenScheme\ControlSchemes.py

c:\Projects\GenScheme\GenScheme\Cu64\__init__.py

c:\Projects\GenScheme\GenScheme\Cu64\agent.py

c:\Projects\GenScheme\GenScheme\Cu64\aidisplays.py

c:\Projects\GenScheme\GenScheme\Cu64\devmapper.py

c:\Projects\GenScheme\GenScheme\Cu64\timedprocess.py

c:\Projects\GenScheme\GenScheme\Cu64\ui.py

c:\Projects\GenScheme\GenScheme\decorators.py

c:\Projects\GenScheme\GenScheme\DeviceMapper.py

c:\Projects\GenScheme\GenScheme\DT\__init__.py

c:\Projects\GenScheme\GenScheme\DT\Device.py

c:\Projects\GenScheme\GenScheme\DT\Manager.py

c:\Projects\GenScheme\GenScheme\DT\SubSystem.py

c:\Projects\GenScheme\GenScheme\excepts.py

c:\Projects\GenScheme\GenScheme\FindName.py

c:\Projects\GenScheme\GenScheme\GenScheme.py

c:\Projects\GenScheme\GenScheme\PMX\__init__.py

c:\Projects\GenScheme\GenScheme\PMX\Device.py

c:\Projects\GenScheme\GenScheme\PMX\Manager.py

c:\Projects\GenScheme\GenScheme\PMX\SubSystem.py

c:\Projects\GenScheme\GenScheme\pyevent.py

c:\Projects\GenScheme\GenScheme\Scheme.py

c:\Projects\GenScheme\GenScheme\Simulated\__init__.py

c:\Projects\GenScheme\GenScheme\Simulated\Device.py

c:\Projects\GenScheme\GenScheme\Simulated\SubSystem.py

c:\Projects\GenScheme\GenScheme\speech.py

c:\Projects\GenScheme\GenScheme\stdoutWriter.py

c:\Projects\GenScheme\GenScheme\Step.py

c:\Projects\GenScheme\GenScheme\TimedProcess.py

c:\Projects\GenScheme\GenScheme\UI.py

c:\Projects\GenScheme\GenScheme\VirtualSubSystem.py

c:\Projects\GenScheme\GenScheme\Waddle.py

Output:

App

Target:

ConsoleApplication

Platform:

ILOnly

Machine:

I386

Compiling...

Saved to App

所以它正确地读取了.pyproj中的文件列表。。。伟大的!但是运行exe给了我这个:Unhandled Exception: IronPython.Runtime.Exceptions.ImportException:

No module named Cu64.ui

因此,尽管编译中显然包含了Cu64\ui.py,但运行exe时却找不到它。这就是我在上一次编辑中第2点所害怕的。如何保留项目的包层次结构?也许需要分别编译每个包?

我会延长这个问题的奖金。最终,我希望我们可以得到一个工作的pyc.py,它可以读取pyproj文件并一步生成工作的exe。然后也许它甚至可以提交到IronPython的codeplex中,以包含在下一个版本中。。。;]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值