【问题标题】:How do I compile an IronPython app into an EXE without Visual Studios (and possibly with py2exe)?如何将 IronPython 应用程序编译为没有 Visual Studios(可能使用 py2exe)的 EXE?
【发布时间】:2012-01-01 07:48:18
【问题描述】:

所以我在直接来这里询问之前尝试搜索这个答案。将 IronPython 应用程序/脚本集转换为 EXE 绝对是可行的。一个问题是他们似乎都在谈论将 IronPython 与 IronPython Studios(Visual Studios 的 Python 插件)一起使用。最后我检查了一下,我认为 IronPython Studios 基本上被 Python Tools for Visual Studios(或 PTVS)插件工具所取代。这样做的问题是,由于我的代码的结构方式,它实际上在将我的代码加载到 IDE 时设法使插件崩溃,从而使 Visual Studios 崩溃。它将一直这样做,直到月底或下月初发布下一个预定更新。所以这不是一个选择,因为我不得不在 Eclipse 中开发我的项目,而不是使用 PyDev 插件。

我之前使用 py2exe 将一些基本的 Python 应用程序转换为可执行文件,但那是我使用 CPython 解释器的时候。我不知道如何设置 py2exe 来使用 IronPython。是否可以使用 py2exe 来制作 IronPython 可执行文件?如果我的程序使用额外的 C# 程序集来完成它的工作,我将如何设置它们以便 py2exe 可以使用它们并且我的可执行文件可以看到它们以供参考?

【问题讨论】:

    标签: .net dll ironpython executable py2exe


    【解决方案1】:

    IronPython 附带一个您可以使用的command line compiler pyc.py(在 Tools\Scripts 文件夹中)。另一种选择是使用SharpDevelop,它将您的 IronPython 代码编译为可执行文件。

    如果您编译的 IronPython 应用程序位于 GAC 中,或者如果它们与您的可执行文件一起部署在同一文件夹中,则它们可以使用 C# 程序集。

    【讨论】:

      【解决方案2】:

      Pyc.py 是要走的路,因为 Visual Studio 的 Python 工具不支持直接编译。 SharpDevelop 具有 Ironpython 的自定义构建操作。在 PTVS 出现之前,我一直使用#Develop。

      请参阅此问题IronPython: EXE compiled using pyc.py cannot import module "os",了解制作 EXE 的一些详细步骤。请记住编译您正在使用的标准库模块。如果你必须让你的用户下载并安装 IronPython,那么你就不需要编译你的脚本了。

      【讨论】:

        【解决方案3】:

        我使用 IronPyton 2.7.8 和 ipyc.exe 而不是 Tools\Scripts\pyc.py,它引入了一些差异,所以我在这里留下一些信息。

        1.使用 /embed 和 /standalone 选项

        如果您将脚本拆分为多个 py 文件,然后使用 /embed 选项和 /main 选项,它们将生成一个包含所有 py 脚本文件的单个 exe 文件。 例如你有“MyMain.py”脚本和“OtherFuncs.py”然后如下。

        C:\Program Files\IronPython 2.7\ipyc.exe /main:MyMain.py OtherFuncs.py /embed /platform:x86 /standalone /target:winexe

        /standalone 选项用于在 C:\Program Files\IronPython 2.7\ 文件夹下包含 IronPython 的基本 dll 文件,例如 IronPython.dll、IronPython.Modules.dll、Microsoft.Dynamic.dll 和 Microsoft.Scripting.dll

        但请注意 DLLs/IronPyton.SQLite.dll 和 DLLs/IronPtyhon.WPF.dll 不包括在内,因此如果您在脚本中使用 WPF 或 SQLite 功能,您应该将这些 dll 文件另外复制并分发到您的 exe文件,您应该在脚本中添加以下行

        clr.AddReference("IronPython.Wpf")
        clr.AddReference("IronPython.SQLite")
        

        2。 C:\Program Files\IronPython 2.7\Lib 文件夹下的库脚本文件

        您的脚本使用 C:\Program Files\IronPython 2.7\Lib 文件夹下的库脚本文件支持的许多标准功能,因此您应该将这些脚本文件与您的 exe 一起分发。

        有两种选择,一种是将 Lib 文件夹复制到包含您的 exe 文件的文件夹中,另一种是将所有标准库脚本文件的 StdLib.dll 制作为以下命令。

        C:\Program Files\IronPython 2.7\ipyc.exe /main:StdLib.py io.py sys.py ...所有必要的脚本文件... /embed /platform:x86 /target:dll

        StdLib.py 只是大小为 0 的空文件,它是生成单个 dll 文件的 hack。您应该在脚本的第一行添加以下行。

        import clr
        clr.AddReference("StdLib")
        

        我使用 python 脚本制作 StdLib.dll,如下所示。

        #...
        #Build StdLib.DLL
        ipath = 'C:\Program Files\IronPython 2.7'
        ipyc = ipath + '\ipyc.exe'
        # any library files you need
        gb += glob.glob(r".\Lib\*.py")
        gb += glob.glob(r".\Lib\encodings\*.py")
        # ...
        gb = [ipyc,"/main:StdLib.py","/embed","/platform:x86","/target:dll"] + gb
        subprocess.call(gb)
        print "Made StdLib"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          • 1970-01-01
          • 2017-03-29
          相关资源
          最近更新 更多