如何在没有Visual Studio(可能还有py2exe)的情况下将IronPython应用程序编译到EXE中?

grg*_*sox 3 .net dll executable ironpython py2exe

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

我之前使用py2exe将一些基本的Python应用程序转换为可执行文件,但那时我正在使用CPython解释器.我不知道如何设置py2exe来使用IronPython.是否可以使用py2exe来生成IronPython可执行文件?如果我的程序使用额外的C#程序集来完成它的工作,我怎么设置它们以便py2exe可以使用它们,我的可执行文件可以看到它们用于引用?

Mat*_*ard 6

IronPython附带了一个命令行编译器pyc.py(在Tools\Scripts文件夹中),您可以使用它.另一种方法是使用SharpDevelop,它将您的IronPython代码编译为可执行文件.

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


小智 5

我使用 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")
Run Code Online (Sandbox Code Playgroud)

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 文件的黑客。并且您应该在脚本的第一行添加以下几行。

import clr
clr.AddReference("StdLib")
Run Code Online (Sandbox Code Playgroud)

我使用 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"
Run Code Online (Sandbox Code Playgroud)


Wom*_*tPM 3

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

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