回答很好,迈克尔。
但是,py2exe可以吓唬更多的新手用户,对他们来说,使用pyinstaller 1.5.1可能更容易(有2.x版本,但它本身过于复杂,尽管它有简单而强大的库挂钩功能[您很可能不需要])。
pyinstaller需要的所有配置都是配置.py),以及可执行文件的主源文件,它将负责其余部分。
下载pyinstaller之后,可以将其路径设置为环境变量,现在可以在批处理或cmd中生成大约三行的可执行文件。
我通常会制作一个批处理脚本,它允许我轻松地更改一些标签,将脚本放到我选择的目录中,并在一次单击中生成可执行文件。
您的脚本可能看起来像:
python %pyinstaller%/Configure.py
python %pyinstaller%/Makespec.py -F icon=C:\Path\To\MyIcon.ico -n ExecutableName
C:\Path\To\Source\Main.py
python %pyinstaller%/Build.py ExecutableName.spec
另外,如果构建.py在等级库文件可用之前调用。
我写了这样一句话:
^{pr2}$
在每个%pyinstaller%命令之间,以确保在它准备就绪之前没有调用任何内容,并且因为“pause”需要一个键项才能继续。“-n2”将在继续之前暂停脚本1秒。
脚本运行后,它将创建两个目录(Build和dist)。您的独立可执行文件将位于“dist”文件夹中。
我在我所有的应用程序中都使用过这个,除了与PyMC一起使用之外,从来没有遇到过问题。在其中一个模块中有一个垃圾库导入调用,它阻止了所有模块查找器跟踪下一个导入,甚至py2exe也无法工作。如果遇到这样的情况,您很可能必须进入模块源代码并修复垃圾。*对于大多数图书馆来说,这种可能性非常小*
在重新阅读你的问题后,张贴,似乎你想要一个真正的安装。
我建议使用pyinstaller使python可执行。创建的EXE将包括主脚本中的任何导入,因此您不必在主安装程序中包含python、PIL、自定义模块的物理安装程序(只要它们在脚本中被引用)。有趣的是:
您需要安装InnoSetup。这是一个免费的开源程序,用于开发专业的windows安装程序。主安装程序需要脚本才能运行。这可能需要一些语法方面的阅读,但我会尽我所能给你jist。
该脚本的语法与Pascal类似,并且该脚本中通常有6个部分用于安装程序:
[设置]、[文件]、[任务]、[图标]、[运行]和[代码]
[Setup]部分包含有关安装程序的所有基本信息:[Setup]
AppId={{123LKJESA-1441-FAKE-IDNO-THISWONTWRK}
OutputDir=.
OutputBaseFilename=MyInstaller
AppName=ExecutableName
AppVersion=1.0
AppPublisher=YourCompany
AppPublisherURL=http://www.URL.com
AppSupportURL=http://www.URL.com
AppUpdatesURL=http://www.URL.com
DefaultGroupName=A_GroupName
LicenseFile=C:\Path\To\Your\License.txt
DefaultDirName={pf}\MainDirName
WizardImageBackColor=$00001a
SetupIconFile=C:\Path\To\Icon.ico
Compression=lzma
SolidCompression=yes
注意:AppID对于你的应用程序是唯一的,如果你创建一个新版本,这个ID必须是相同的,否则安装程序将安装一个单独的exe,卸载程序很可能会崩溃。
另外,DefaultDirName的键{pf}表示程序文件。还有其他的位置键,可以在网站文档中找到。
[文件]-此部分将包括安装程序所需的任何文件,并遵循相当标准的格式。
您需要一个Source:和一个destin(DestDir:)。其他有用的选项还有CopyMode,它告诉安装程序在重新安装时要做什么,以及Flags:它提供了更多关于如何处理这个文件的选项。
示例:[Files]
Source: C:\Path\to\my\created\python\executable.exe; DestDir: {app}; CopyMode: alwaysoverwrite;
Source: C:\Path\to\directory\of\files; DestDir: {localapp}; CopyMode: alwaysoverwrite; Flags: recursesubdirs;第一个源destdir中的{app}键是对应用程序目标的引用。
{localapp}键将把我给定目录中的所有文件存储在用户本地app数据文件中,python应用程序可以引用该文件。
[Tasks]将为用户提供选择特定任务的选项应用程序。在下面的例子中,我希望用户选择是否要有一个桌面图标。
Name: "desktopicon" Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
[Icons]部分是非常不言自明的,可以在在线文档中找到(同时这篇文章也变得太长了)
最后是[Code]部分
这个部分不是完全必要的,因为安装程序将在默认模式下运行,而没有它。但是,如果你想创建一个更复杂的安装程序,这里是你要做的。这是一个普通程序员可以处理的部分,但是如果你有Pascal的背景,这将非常有帮助。在这里,您可以创建自定义窗口,安装后和安装前检查(例如,如果某些程序已经安装,则检查注册表,否则在继续之前启动另一个安装程序)
我匆忙中把[跑步]部分忘了。
[Run]部分为用户提供了在安装后立即运行应用程序的选项。下面是一个例子,在最后一页上会显示一个复选框,这个复选框最初是未选中的,供用户选择是否要运行程序。
Filename: "{app}\ExecutableName.exe"; Flags: nowait postinstall unchecked
*概述:
一个好的应用程序和安装程序不应该要求用户安装python和使用的独立库。使用py2exe或pyinstaller将创建一个独立的可执行文件,因此最终用户机器上不需要安装这些文件。InnoSetup将允许您创建安装程序,并将该可执行文件(以及任何其他非python基本源代码)放在所需的位置,这样它就可以在计算机的.pyc文件中运行完全相同的程序。
**在部署应用程序之前,最好在不同的计算机上测试应用程序和安装程序(或创建虚拟机)。例如,Windows7上的{localappdata}键指的是“C:\Users\UserName\AppData\Local”,在XP上它指的是“C:\Documents and Settings\UserName\Local”(试着从头顶上记住,所以可能是错的)。因此,如果您的程序访问用户的本地应用程序数据来存储文件,那么XP上的路径链接很有可能被破坏操作系统环境['LOCALAPPDATA']。在XP上,InnoSetup键{userappdata}将指向“C:\Documents and Settings\UserName\Application Data”,这是python的正确方向操作系统环境映射将指向。使用“{userappdata}\Local”将产生正确的路径。但在Windows7上,{userappdata}将指向“C:\Users\UserName\AppData\Roaming”。因此,如果应用程序将向后兼容windows版本,则需要在[code]部分设置一段代码,以确定正确的版本,并设置要使用的键的布尔标志。
联机文档的URL为:
我希望您(或其他人)觉得这个工具有用,因为它是一个功能强大的工具,因为您在[files]部分包含的所有文件都将打包到独立的安装程序中,并显示在您指定的目标位置。即使这可能有点冗长,它应该给你一个真正的好的开始制作可执行文件和包装它与安装程序。
祝你好运!