如何编写安装程序(安装Python,Python模块和其他依赖)的Windows盒?(how to

2019-10-17 08:36发布

我知道在这个问题上没有什么,但我需要关于最好的工具或用于创建安装蟒蛇,一些自定义的Python模块,其他Python模块,如PIL安装程序方法,以及一些EXE依赖的建议,都生活在一个网络存储库,在Windows机器上。 在存储库是蟒蛇(MSI文件)的安装程序,PIL(exe文件),自定义Python模块(PYC文件),和两个Windows可执行文件(和exe文件和一个zip文件)。 任何意见欢迎。

Answer 1:

你可以与任何安装应用程序在那里的做到这一点。 每个因安装有一个无提示安装选项,那么您的安装只需要调用安装每个以正确的顺序的依赖关系。 我不会推荐任何特别的Windows安装程序的应用程序,因为我不喜欢任何人,但他们都将做你想做的。

你有另一种选择是使用py2exe可以捆绑到一切,在自己的Python环境中运行的一个exe文件。 加方的情况是,你不必担心在用户环境中安装Python和具有潜在用户卸载蟒蛇,然后让你的应用程序停止工作,因为一切都在一个独立的环境。

我已经看到了这一点做的其他方式是写在任何编译Windows语言你喜欢,做这一切为你定制的exe文件,但这需要大量的工作。

你也可以得到py2exe路线的优势,与您无论是一个安装应用程序或处理安装,通过手动放置python.exe,DLL和相关的代码相对正确的目录中一个独立的EXE写一个安装一个小的工作你的应用程序代码。 您可能需要您的PYTHONPATH环境设置混乱,当你的应用程序开始一切工作正常,但这种方式,你不必担心安装Python和用户是否已经安装Python或如果他们卸载它,因为你有Python版本您需要捆绑您的应用程序。

有一点需要注意的是,如果你是担心大小的Python安装程序本身是任何依赖前约10 MB,但使用你的应用程序有很多是不相关的最终用户,有没有Python的运行环境安装程序好像有Java运行时环境的安装程序,只要安装你需要运行Python是什么,你总能得到开发工具。

希望这有所帮助。



Answer 2:

尼斯回应迈克尔。

但是,py2exe可以恐吓更多的新手用户,对于他们来说可能是更容易使用pyinstaller 1.5.1(有2.X可用,但它在本身复杂,尽管它有简单而强大的库挂钩[你很可能不会需要])。

所有pyinstaller需要进行配置(自动,Configure.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

此外,您可能要包括伪暂停,如果Build.py被称为规范文件可用之前。 我把这个行:

ping -n 2 127.0.0.1>nul

每个%pyinstaller%指令之间,以确保没有被调用之前就准备好了,因为“暂停”需要一个密钥项继续。 该“-n 2”将脚本暂停1秒钟,然后再继续。

脚本运行后,它会创建两个目录(构建和DIST)。 你独立的可执行文件将位于“DIST”文件夹中。

我用这对我的所有应用程序,从未有过一个问题,除了与PyMC使用。 这其中,停止了所有的模块从取景器之后的下一个进口的一个模块有一个垃圾库导入通话,即使py2exe是行不通的。 如果你遇到这样的事情,你将极有可能进入该模块的源代码和解决垃圾。 *这个机会是大多数图书馆非常渺茫*

- 编辑(2分钟后) -

重新阅读您的问题发布后后,似乎你想要一个实际的安装程序。

我会建议使用pyinstaller使你的Python可执行文件。 该EXE创建将包括主脚本任何进口,所以你不会有(只要他们在你的脚本中引用),以包括蟒蛇,PIL,在主安装程序自定义模块的物理安装。 现在是最有趣的部分:

您将要安装InnoSetup。 它是用于开发专业的安装人员为Windows的免费开源程序。 主安装程序将需要一个脚本来运行。 这可能需要对一些语法阅读了,但我会尽我所能,给你JIST。

脚本的语法类似于Pascal和通常有在该脚本6个部分被在安装程序使用:

[设置],[文件],[任务],[图标],[运行]和[代码]

[设置]部分包括所有关于你的安装程序的基本信息:

[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。 还有其他的位置键,可用,并且可以在网站上的文档中找到。


[文件] - 此部分将包括安装程序所需的所有文件,并且它遵循一个非常标准的格式。 您将需要一个来源:和目的地(DESTDIR :)。 其他有用的选项是CopyMode,它告诉安装上重新安装做什么,以及标志:这给什么就用这个文件做了更多的选项。

例:

[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是将应用程序的目标的引用。
  • 该{localapp}键将存储在我的目录中给出的文件,在用户的本地应用程序的数据文件,它可以由Python应用程序引用。

[任务]将会给用户选项,选择该应用程序特定的任务。 在下面的例子中我希望用户选择他们是否希望有一个桌面图标。

[Tasks]
Name: "desktopicon" Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";

在[图标]部分是不言自明的,并且可以在在线文档中查找(也是这个职位越来越太长)

最后[代码]部分

这部分是没有完全必要的,因为安装程序将在默认模式下进行运行它。 但是,如果你想创建一个更复杂的安装程序,在这里你会做到这一点。 这是可以通过一个普通的程序员进行处理的部分,但如果你有一个背景,帕斯卡尔将真正帮助。 在这里,你可以创建自定义窗口,设置AfterInstall和BeforeInstall检查(如是否已安装某些程序检查登记,否则继续之前启动另一个安装程序)

- 编辑2 -

在我匆忙我忘了[运行]部分。 [运行]部分给用户立即运行该应用程序后安装选项。 这里有一个例子,将显示在最后一页上一个复选框,也就是最初选中,供用户选择,如果他们想运行的程序。

[Run]
Filename: "{app}\ExecutableName.exe"; Flags: nowait postinstall unchecked

*回顾一下:一个好的应用程序和安装不应该要求用户安装Python和使用单独的库。 使用py2exe或pyinstaller将创建一个独立的可执行文件等等所有这将需要对最终用户的计算机上安装。 InnoSetup将允许您创建的安装程序,并将该可执行文件(及任何其他非必需的Python源)在所需位置,以便它可以,因为它没有运行时完全一样仍处于从您的机器pyc文件。

**在部署应用程序之前,它是测试你的不同的机器上应用程序和安装(或创建虚拟机)是一个好主意。 例如。 在Windows 7上{LOCALAPPDATA}键指的是 “C:\ Users \用户名\ AppData \本地” 和XP它指的是 “C:\ Documents和Settings \用户名\ Local”(试图记住了我的头顶部所以可能是错误的)。 所以这是一个很好的机会,如果你的程序访问用户的本地应用程序数据存储文件,该路径链接将在XP被打破,使用os.environ [“LOCALAPPDATA”]。 在XP的InnoSetup键{userappdata}将指向“C:\ Documents和Settings \用户名\应用数据”,这是在将蟒os.environ映射将被指向的正确的方向。 使用“{} userappdata \本地”将产生正确的道路。 但在Windows 7中,{} userappdata将指向 “C:\ Users \用户名\ AppData \漫游”。 因此,如果应用程序是向后兼容的Windows版本兼容,你需要设置一个位在[代码]部分代码,以确定正确的版本,并设置一个布尔标志上使用的关键。

对于在线文档的URL是:

http://www.jrsoftware.org/ishelp/

我希望您(或他人)发现这很有用,因为它是一个强大的工具,因为所有你在[文件]部分将被打包成独立的安装程序包含的文件,并会出现在你给它的目的地。 尽管这可能是一个小长篇大论,它应该给你做的可执行文件,并使用安装程序将其打包一个真正良好的开端。

祝好运!



文章来源: how to write installer (installing python, python modules and other dependencies) for windows boxes?