打包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中,以包含在下一个版本中。。。;]

ironpython怎么编译_将IronPython WPF项目编译为相关推荐

  1. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件

    历史文章: [javac命令不能使用,提示不是内部命令或外部命令,请查看历史文章] =================需求说明========================== 之前的文章中,仅说明 ...

  2. python so反编译_使用cython把python编译so

    1.需求 为了保证线上代码安全和效率,使用python编写代码,pyc可直接反编译,于是把重要代码编译so文件 2.工作 2.1 安装相关库: pip install cython yum insta ...

  3. ipa文件反编译_手把手教你反编译别人的app

    虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的&q ...

  4. ipa文件反编译_手把手教你反编译别人的iOS App

    下载智可网手机app可以学习更多哦! 虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且 ...

  5. java无ide编译_[转]无IDE时编译和运行Java

    本文由 ImportNew - Grey 翻译自 dzone.欢迎加入Java小组.转载请参见文章末尾的要求. 最近Java subreddit出现了一篇"在没有IDE的情况下编译Java包 ...

  6. java 混淆编译_贴一段自动编译java,并混淆编译的代码

    刚写的一个自动编译.混淆.打包jar的代码,做个记录 用到的NuGet: using Ionic.Zip; using System; using System.Collections.Generic ...

  7. 命令行编译_[Bazel]自定义命令行编译标志

    1 名词 2 背景 3 自定义构建设置的定义 4 自定义构建设置的实现和实例化 5 自定义规则绑定自定义构建设置 6 小结 7 参考资料 1 名词 这里名词只做个索引,方便理解,可能现在反而让理解变得 ...

  8. keil使用命令行编译_用c51命令行编译HEX单片机文件

    刚开始学STC51单片机的开发,用Keil uVision4进行编辑和编译.Keil的IDE是使用工程方式组织,对于小弟初学并不是很方便. 每次做个试验都要建立一个工程,而且会出现一堆文件. 虽然电脑 ...

  9. java jar防止反编译_防止Jar包被反编译

    方法就是,向Jar注入无效代码(不合法的,或者根本不是代码的字符串). 那么无效的代码又怎么能正确运行呢? 答案就是,你要保证你的代码永远不会执行到那一步. 我作一个简单的例子说明: 我们建立一个项目 ...

  10. java8编译_为什么在Java7中编译而在Java8中编译?

    泛型是棘手的. 看起来它们在不同版本的 Java中被区别对待. 此代码在Java 7中成功编译,无法使用Java 8进行编译. import java.util.EnumSet; public cla ...

最新文章

  1. ASP.NET Core结合Nacos来完成配置管理和服务发现
  2. 网络安全技术文章征稿启事
  3. 个人成长:拉开你和同龄人差距的100个顶级认知
  4. html5支持多线程,html5 多线程
  5. 自定义异常throw
  6. SQLiteDatabase中query、insert、update、delete方法参数说明
  7. Clion配置Ros环境
  8. python求偏度系数_python pandas库和stats库计算偏度和峰度(附程序)
  9. java设置手机后台进程限制_当应用程序在Android Pie上受到后台限制时启动前台服务...
  10. magisk卸载内置软件_如何卸载/恢复iPhone自带的内置应用?
  11. 华为云备份会上传私密相册吗_云相册有哪些作用?上传照片会不会占用手机内存?...
  12. 正是岳麓好风景,软件逢君正当时
  13. 学习AlphaGo理论知识-----part two
  14. 神奇宝贝java_我的世界下载 1.25神奇宝贝整合包_单机游戏下载
  15. 三种经典图像滤波方法介绍——双边滤波(Bilateral filter)、导向滤波(Guided Fliter)、滚动导向滤波(RollingGuidedFilter)
  16. C语言 计算签到所得积分
  17. JAVA计算机毕业设计物料追溯系统(附源码、数据库)
  18. firefox 绿色护眼
  19. NS3 仿真系列资料大全
  20. 笔记本宏碁 4750G加装固态硬盘小计

热门文章

  1. 毕设题目:Matlab图像增强
  2. 【图像去噪】基于matlab邻域+中值滤波图像去噪【含Matlab源码 961期】
  3. unity和python哪个好学_纠结学习Python还是unity3d_课课家教育
  4. python3自动化软件发布系统_PythonPC客户端自动化实现原理(pywinauto)
  5. Python 安装skimage即Scikit-Image
  6. 磁盘剩余空间策略_Linux性能监控常用的命令:监控磁盘使用情况-df命令
  7. fluent 对电机油冷分析_如何避免发电机过热引起的能源损耗?
  8. 千兆网卡为什么慢_宽带300M,光猫是千兆的,电脑网卡和无线路由器都是千兆的。但是速度仍是100M。这是为什么?...
  9. 计算机装调与维护报告,Vmware workstation在计算机装调与维护实训中的应用
  10. 计算机硬件英语单词有哪些,计算机硬件英语词汇