【问题标题】:Iron Python / Iron Ruby EXEIron Python / Iron Ruby EXE
【发布时间】:2009-06-18 17:22:01
【问题描述】:

我一直梦想着从脚本语言创建一个“真正的 exe”。随着基于 DLR 的 Python 和 Ruby 实现的可用,这是否更接近现实?

我想创建一个“真正的应用程序”:

  • Windows 窗体应用程序
  • 控制台应用程序
  • Windows 服务

并且分发单元是编译后的 exe。

这可能吗?还是 MS 刚刚创建了基于 .NET 的脚本文件解释器?

如果您这样做,您将如何构建您的应用程序/项目?您使用的是 C# 和 DLR 代码的混合体吗?

【问题讨论】:

    标签: ironpython ironruby


    【解决方案1】:

    IronPython 或 IronRuby 项目可以很好地编译为 dll 或可执行文件,并且在任何方面都是“真正的”可执行文件,但前提是运行它们的人必须安装相关的 .Net 框架和依赖项(依赖项可能是默认情况下存在于同一目录中,但必须安装框架)。与 Visual Studio 的集成仍然不存在,但像 IronPythonStudio 这样的项目使用免费的 VS Shell 效果很好。 DLR 作为 VS 2010 中 c# 动态的依赖项的存在意味着与 Iron* 组的 VS 集成变得更容易实现目标和更高的优先级。

    结果绝不会被解释(CIL 在运行时或根据需要通过 ngen 被编译成机器代码)并且 DLR 的某些方面意味着某些操作以类似于后期绑定的方式延迟,但更强大和更重要的是与幼稚的解释器相比,复杂的缓存机制使其相对较快。

    许多传统解释的脚本语言正在创建自己的基于 VM 的编译策略或利用现有的编译策略(如 JVM、.Net CLR 或开放的如 LLVM),因为这会在许多常见情况下显着提高性能。

    在 Iron* 语言的情况下,以 MS CLR 为基础的好处是,生成的可执行文件在最常见的操作系统系列的绝大多数安装中都可以“正常工作”。与 Java 相比,在许多操作系统中,通过直接单击 / 或通过外壳程序“执行”,jar 文件无法“运行”。与此相反的是,与基于 JVM 或 LLVM 的解决方案相比,这会降低互操作性,后者的平台支持更广泛,但不可避免地在操作系统集成方面更加多样化。

    【讨论】:

    • 您能否为此提供文档或程序?在 Visual Studio 中似乎无法“文件->新建项目”Python,因此需要做一些额外的工作。
    • VS 集成仍然不存在(我将为此添加注释)但您可以使用codeplex.com/IronPythonStudio 获得类似 VS 的环境(它使用缩减的 VS Shell 作为其基础)
    • 将已编译的 DLR 代码放入可执行文件的实际方法是什么?我只能在下面的答案中找到链接,它似乎只是指测试代码。
    • IronPython.Hosting.Compiler 是您想要使用的。我链接到的 shell 集成项目使用它来提供 IronPythonTasks 以编译为 dll/exe/winexe,并且很可能可以从 vanilla VS 中使用,并进行一些调整。 python 代码总是需要在自己的 dll 中(如果需要,可以通过 ilmerge.exe 合并 dll),并且在 VS 集成存在之前编译会很混乱。
    【解决方案2】:

    您可以使用Py2Exe 从常规 python 创建 exe。但是不应该有任何东西阻止您使用 Visual Studio 或 SharpDevelop 使用 IronPython 创建 exes

    【讨论】:

      【解决方案3】:

      虽然与 Iron* 问题没有直接关系,但对于想要从 python 脚本中获取二进制文件的人来说可能会很有趣:pyinstaller

      适用于 Windows(32 位和 64 位)、Linux(32 位和 64 位)和 Mac OS X(仅限 32 位)

      适用于从 1.5 到 2.7 的任何 Python 版本

      【讨论】:

      • 得到 nothing 与问题有关
      • 如果您阅读问题帖子的第一句话,您会看到我的帖子与问题有什么关系......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2011-03-17
      • 2014-12-15
      • 1970-01-01
      相关资源
      最近更新 更多