我使用 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"