Aph*_*hex 22 python wpf ironpython visual-studio-2010
打包IronPython应用程序进行部署的最佳方法是什么?在浏览网页后,我提出的最好的事情(以及我目前正在做的事情)是将clr.CompileModules()我整个项目的.py文件粘合到一个.dll中,然后单独run.py执行此操作来运行dll:
import clr
clr.AddReference('compiledapp.dll')
import app
Run Code Online (Sandbox Code Playgroud)
但这仍然不是最理想的,因为这意味着我必须这样做
.dll,the .xaml和run.py启动器)此外,在IronPython与Visual Studio 2010进行了精彩的集成之后,感觉如此...... hacky.我完全不知道为什么没有针对IPy应用程序的集成构建系统,因为它总体上归结为IL无论如何.
理想情况下,我希望能够以某种方式.exe在.xaml内部合并一个单独的内容(我读到C#apps将XAML编译为BAML并将它们合并到可执行文件中),并且不需要安装IronPython来运行.这至少有一半可能吗?(我想如果exe需要一些额外的.DLL或者其他东西就可以了.重要的是它是.exe格式的.)
一些编辑要澄清:我已经尝试了pyc.py,但它似乎并不承认我的项目不仅仅是这样的事实app.py.它产生的exe的大小表明它只是"编译" app.py而不包含任何其他文件到exe中.那么,我如何告诉它编译我的项目中的每个文件?
为了帮助可视化,这是我项目的解决方案资源管理器窗口的屏幕截图.
编辑II:遗憾的是,唯一的方法是使用pyc.py并将每个文件作为参数传递给它.我对这种方法有两个问题:
编辑III:由于通过pyc.py命令行传递70个文件名将是不实用的,为了解决更优雅地构建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
Run Code Online (Sandbox Code Playgroud)
所以它正确读入了...中的文件列表.pyproj!但运行exe给了我这个:
Unhandled Exception: IronPython.Runtime.Exceptions.ImportException:
No module named Cu64.ui
Run Code Online (Sandbox Code Playgroud)
因此即使Cu64\ui.py显然包含在编译中,exe在运行时也无法找到它.这是我在上一次编辑的第2点中所害怕的.如何保留项目的包层次结构?也许可能需要单独编译每个包?
我会延长这个问题的赏金.最后,我的希望是我们可以获得一个有效的pyc.py,它可以读取pyproj文件并一步生成工作的exes.那么也许它甚至可以提交给IronPython的codeplex以包含在下一个版本中......;]
它"归结为IL",但它与C#代码生成的IL不兼容,因此无法直接编译为独立的.exe文件.您需要使用pyc.pyCompileModules创建的DLL将代码编译为存根EXE.然后分发这些文件IronPython.dll,IronPython.Modules.dll,Microsoft.Dynamic.dll,Microsoft.Scripting.Debugging.dll,Microsoft.Scripting.dll,,当然还有XAML文件.
要编译其他文件,只需将它们添加为参数:
ipy.exe pyc.py /main:app.py /target:winexe another.py another2.py additional.py
使用pyc.py生产app.exe,不要忘了,包括app.dll和IronPython库.
对于XAML - 我创建的项目仅用于.xaml我在VS中编译的文件,然后在IronPython中使用它们.例如:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/CompiledStyle;component/Style.xaml" />
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
我发布了一个Python脚本,它可以获取IronPython文件,找出它的依赖关系并将该批量编译成Ironpython 2.6 .py - > .exe中的独立二进制文件.希望你觉得它有用.它应该也适用于WPF,因为它捆绑了WPF支持.
| 归档时间: |
|
| 查看次数: |
8272 次 |
| 最近记录: |