当前位置: 首页 > 科技观察

如何为Linux打包Python应用程序

时间:2023-03-20 13:25:28 科技观察

了解如何使用dh_virtualenv使您的Python应用程序可安装为.deb包。在基于Debian的操作系统(例如Debian或ElementaryOS)上安装Python应用程序的一种方法是使用dh_virtualenv工具。它构建了一个.deb包,将Python虚拟环境包装在应用程序之外,并在安装时部署它。在本文中,我将解释如何通过构建一个包含HTTPie工具的包来使用它来从命令行测试HTTPAPI,而无需激活虚拟环境。用dh_virtualenv打包首先需要安装dh_virtualenv需要的工具。dh_virtualenv的文档提供了所有安装选项。在基于Debian的系统上,我输入:apt-getinstalldh-virtualenvdevscripts虽然不需要devscripts包,但它简化了后续操作。现在,创建一个目录来保存源代码。由于这是一个本地的、非官方的HTTPie包,我将其称为myhttp。接下来,让我们在myhttp中创建一些文件来为Debian构建系统提供元数据。首先,创建debian/control文件:Source:myhttpSection:pythonPriority:extraMaintainer:JanDoeBuild-Depends:debhelper(>=9),python3.7,dh-virtualenv(>=0.8)Standards-版本:3.9.5包:myhttpArchitecture:anyPre-Depends:dpkg(>=1.16.1),python3.7,${misc:Pre-Depends}Depends:${misc:Depends}描述:httpclient用于做事那么这些是什么信息呢?正如Debian文档所述:“第1-7行是源代码包的控制信息。第9-13行是二进制包的控制信息。”下面是我使用的:Sectionvalues对我们来说大多没有意义,但需要存在。向BootstrapUI安装程序提供信息是有意义的,但不是为这个包提供信息。像这样的第三方包的Priority的正确值是extra。强烈建议在Maintainer字段中填写正确的联系信息。但它不一定是您的个人电子邮件,如果包由团队维护并且您想将问题发送到团队的电子邮件别名,例如基础设施团队。Build-Depends字段标识您需要debhelper、python和dh-virtualenv来构建包:包构建过程将确保在构建包时安装这些依赖项。Standards-Version字段主要针对人类。它表示您遵循的准则。本指南基于dh-virtualenv的官方文档,该文档基于Debian3.9.5指南。最好始终将源代码包和二进制包命名为相同的名称。Architecture字段应该是Any,因为除非虚拟环境可能包含一些特定于体系结构的文件。否则,最好将该字段选择为任意。保持Pre-Depends列表不变:这是一种非常严格的依赖形式,您很少需要超过此处建议的最小依赖项。依赖关系通常由构建系统精确计算,因此没有理由手动指定它们。如果您的包主要在内部使用,则描述字段可能只需要最少的信息或指向公司wiki的链接,否则更多信息会更有用。然后创建debian/compat文件,它的存在主要是为了历史目的:$echo"9">debian/compat接下来,创建一个变更日志来通知软件包用户自上次发布以来发生了什么变化。最简单的方法是使用dch--create创建一个模板,然后填写值。一旦填充它看起来像:myhttp(2.0.0-1)stable;紧迫性=中*初始版本。--JanDoe2020年3月27日星期五01:09:22+0000现在您需要告诉该工具安装HTTPie,但是哪个版本?创建一个宽松的requirements.in文件:httpie通常,一个宽松的需求文件将只包含项目的直接依赖项,并在需要时指定最低版本。并不总是需要指定最低版本:这些工具通常更愿意将依赖项转换为“最新的可能版本”。如果您的Debian包对应于一个内部Python包,这在内部应用程序中很常见,那么松散的需求文件看起来很相似:只有一行包含包名。然后使用pip-compile(通过安装PyPI包pip-tools可用):$pip-compilerequirements.in>requirements.txt这将生成一个名为requirements.txt的严格依赖文件:#要更新,运行:##pip-compilerequirements.in#certifi==2019.11.28#viarequestschardet==3.0.4#viarequestshttpie==2.0.0#via-rrequirements.inidna==2.9#viarequestspygments==2.6.1#viahttpierequests==2.23.0#viahttpieurllib3==1.25.8#viarequests最后,编写一个debian/rules文件来创建包。由于dh_virtualenv负责所有艰苦的工作,规则文件很简单:#!/usr/bin/make-f%:dh$@--withpython-virtualenv--python/usr/bin/python3.7确保指定Python解释器。默认情况下,它将使用/usr/bin/python,即Python2,但您应该使用受支持的Python版本。完成,下一步是构建包:$debuild-b-us-uc这将在父目录中生成一个类似myhttp_2.0.0-1_amd64.deb的文件。该文件可以安装在任何兼容系统上。一般来说,最好在同一平台上为特定平台(例如Debian10.0)构建Debian软件包。您可以将此Debian软件包保存在存储库中,并使用Ansible等工具将其安装在所有相关系统上。总结基于Debian系统的应用程序打包是一个多步骤的过程。使用dh_virtualenv将使过程简单明了。