第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

如果执行成功,您将看到与此类似的屏幕:

_images/gui2exe.jpg

现在转到“文件”->“新建项目”并为您的项目命名。在这种情况下,我给项目打了电话 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),下载程序并安装它。然后运行程序。您应该看到主程序及其上面的以下对话框:

_images/inno_welcome.jpg

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

_images/inno_setup_1.jpg

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

_images/inno_setup_2.jpg

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

_images/inno_setup_3.jpg

现在你可以点击了 Next .确保“开始”菜单文件夹的名称正确(在本例中, WX表格 )然后继续。如果您愿意,您可以忽略接下来的两个屏幕或尝试它们。但是,我没有使用许可证或将信息文件放入以向用户显示。完成前的最后一个屏幕允许您选择要将输出放入的目录。我只是将其保留为空,因为它默认为可执行文件所在的位置,这在本例中很好。点击 NextNext完成 .这将产生一个成熟的 .iss 文件,这是Inno安装程序用来将应用程序转换为安装程序的文件。它将询问您是否希望现在继续编译脚本。去做吧。然后它会问你是否想保存你的 .iss 脚本。这是个好主意,所以你也去做吧。希望您没有收到任何错误,您可以尝试新的安装程序。

如果您有兴趣了解Inno的脚本语言,请随意阅读Inno的文档。你可以用它做很多事情。如果您碰巧对构建脚本进行了更改,则可以转到 建造 菜单和选择 编译 菜单项。

总结

现在,您已经知道了如何创建一个真正的、实时的安装程序,您可以使用它来安装应用程序及其所需运行的任何文件。当您的工具栏或默认数据库、配置文件等有很多自定义图标需要与应用程序一起分发时,这特别方便。返回并再次尝试创建安装程序,但选择不同的选项以查看您还可以做什么。实验是学习的好方法。只要确保你总是有一个备份,以防出现问题!