第44章-创建安装程序¶
在本章中,我们将引导您完成创建可执行文件的过程,然后将其打包到安装程序中。我们将使用一个非常简洁的名为gui2exe的小用户界面,该界面由AndreaGavana编写,用于创建可执行文件。它是基于wxpython的,所以您需要安装它才能使用它。gui2exe支持py2exe、bbfreeze、cx-freeze、pyinstaller和py2app。一旦我们有了 dist 文件夹已创建,我们将使用 安装制作工具 创建安装程序。
我们将再次使用以下代码:
# sampleApp.py
import wx
class DemoPanel(wx.Panel):
""""""
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
labels = ["Name", "Address", "City", "State", "Zip",
"Phone", "Email", "Notes"]
mainSizer = wx.BoxSizer(wx.VERTICAL)
lbl = wx.StaticText(self, label="Please enter your information here:")
lbl.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD))
mainSizer.Add(lbl, 0, wx.ALL, 5)
for lbl in labels:
sizer = self.buildControls(lbl)
mainSizer.Add(sizer, 1, wx.EXPAND)
self.SetSizer(mainSizer)
mainSizer.Layout()
def buildControls(self, label):
"""
Put the widgets together
"""
sizer = wx.BoxSizer(wx.HORIZONTAL)
size = (80,40)
font = wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD)
lbl = wx.StaticText(self, label=label, size=size)
lbl.SetFont(font)
sizer.Add(lbl, 0, wx.ALL|wx.CENTER, 5)
if label != "Notes":
txt = wx.TextCtrl(self, name=label)
else:
txt = wx.TextCtrl(self, style=wx.TE_MULTILINE, name=label)
sizer.Add(txt, 1, wx.ALL, 5)
return sizer
class DemoFrame(wx.Frame):
"""
Frame that holds all other widgets
"""
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, wx.ID_ANY,
"Py2Exe Tutorial",
size=(600,400)
)
panel = DemoPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = DemoFrame()
app.MainLoop()
我们开始吧!
Gui2Exe入门¶
要使用gui2exe,您只需访问其网站(http://code.google.com/p/gui2exe/)并下载一个版本。然后解压它并运行调用的脚本 GUI2Exe.py .gui2exe项目基于wxpython,因此请确保您也安装了它。我用wxpython 2.9成功地运行了我的。您可以这样称呼它:
python GUI2Exe.py
如果执行成功,您将看到与此类似的屏幕:

现在转到“文件”->“新建项目”并为您的项目命名。在这种情况下,我给项目打了电话 WX表格 .如果你想,你可以添加一个伪造的公司名称,版权,并给它一个程序名称。一定要浏览您的主python脚本(即 sampleApp.py )。根据安德里亚的网站,你应该 优化 到 2 , 压缩的 到 2 和 捆绑文件 到 1 .这似乎在大多数时候都有效,但我犯了一些错误,这些错误似乎源于将最后一个错误设置为 1 .事实上,根据我在Py2Exe邮件列表中的一个联系人, 捆 选项应设置为 3 以最小化错误。将bundle设置为“1”的好处是,您最终只得到一个文件,但是由于我要用inno将其卷起,所以我将使用选项3来确保我的程序运行良好。
一旦你拥有了你想要的一切,点击 编译 按钮位于右下角。这将创建要在中分发的所有文件 dist 文件夹,除非您通过检查 “距离”复选框 并编辑随后的文本框。编译完成后,gui2exe将询问您是否要测试可执行文件。继续打吧 Yes .如果您收到关于丢失模块的任何错误,可以将它们添加到 python模块 或 python包 视情况而定。对于这个例子,您不应该有那个问题。
现在我们准备好学习如何创建安装程序了!
让我们做一个安装程序!¶
既然我们有了一个可执行文件和一系列依赖项,那么我们如何创建一个安装程序呢?在本章中,我们将使用Inno安装程序,但您也可以使用NSI或Microsoft品牌的安装程序。您需要访问他们的网站(http://www.jrsoftware.org/isdl.php),下载程序并安装它。然后运行程序。您应该看到主程序及其上面的以下对话框:

选择 使用脚本向导创建新脚本 选项,然后按“确定”按钮。点击 Next 你应该看到这样的东西:

你想怎么填就怎么填,然后点击 Next (我打电话给我的) WX表格 )。下一个屏幕允许您选择默认情况下安装应用程序的位置。它默认为 程序文件 很好。点击 Next .现在您将看到以下屏幕:

浏览到为添加它而创建的可执行文件。然后单击 添加文件… 按钮添加其余部分。实际上,您可以选择除exe以外的所有文件,然后单击OK。我的结果是这样的:

现在你可以点击了 Next .确保“开始”菜单文件夹的名称正确(在本例中, WX表格 )然后继续。如果您愿意,您可以忽略接下来的两个屏幕或尝试它们。但是,我没有使用许可证或将信息文件放入以向用户显示。完成前的最后一个屏幕允许您选择要将输出放入的目录。我只是将其保留为空,因为它默认为可执行文件所在的位置,这在本例中很好。点击 Next , Next 和 完成 .这将产生一个成熟的 .iss 文件,这是Inno安装程序用来将应用程序转换为安装程序的文件。它将询问您是否希望现在继续编译脚本。去做吧。然后它会问你是否想保存你的 .iss 脚本。这是个好主意,所以你也去做吧。希望您没有收到任何错误,您可以尝试新的安装程序。
如果您有兴趣了解Inno的脚本语言,请随意阅读Inno的文档。你可以用它做很多事情。如果您碰巧对构建脚本进行了更改,则可以转到 建造 菜单和选择 编译 菜单项。
总结¶
现在,您已经知道了如何创建一个真正的、实时的安装程序,您可以使用它来安装应用程序及其所需运行的任何文件。当您的工具栏或默认数据库、配置文件等有很多自定义图标需要与应用程序一起分发时,这特别方便。返回并再次尝试创建安装程序,但选择不同的选项以查看您还可以做什么。实验是学习的好方法。只要确保你总是有一个备份,以防出现问题!