溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎樣為L(zhǎng)inux打包Python應(yīng)用

發(fā)布時(shí)間:2021-09-27 15:51:46 來源:億速云 閱讀:129 作者:柒染 欄目:系統(tǒng)運(yùn)維

本篇文章給大家分享的是有關(guān)怎樣為L(zhǎng)inux打包Python應(yīng)用,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

怎樣為L(zhǎng)inux打包Python應(yīng)用

在基于 Debian 的操作系統(tǒng)(例如 Debian 或 Elementary OS)上安裝 Python 應(yīng)用的一種方法是使用 dh_virtualenv 工具。它可以構(gòu)建一個(gè) .deb 包,在應(yīng)用之外封裝了一個(gè) Python 虛擬環(huán)境,并在安裝時(shí)進(jìn)行部署。

使用 dh_virtualenv 打包

首先,你需要安裝 dh_virtualenv 所需的工具。dh_virtualenv 的文檔提供了所有安裝選項(xiàng)。在基于 Debian 的系統(tǒng)上,我輸入:

apt-get install dh-virtualenv devscripts

盡管不需要 devscripts 包,但它可以簡(jiǎn)化后續(xù)操作。

現(xiàn)在,創(chuàng)建一個(gè)目錄來保存源碼。由于這是一個(gè)本地的、非官方的 HTTPie 打包,因此我將其稱為 myhttp。接下來,讓我們?cè)?myhttp 內(nèi)創(chuàng)建一些文件,向 Debian 構(gòu)建系統(tǒng)提供元數(shù)據(jù)。

首先,創(chuàng)建 debian/control 文件:

Source: myhttpSection: pythonPriority: extraMaintainer: Jan Doe <jandoe@example.org>Build-Depends: debhelper (>= 9), python3.7, dh-virtualenv (>= 0.8)Standards-Version: 3.9.5 Package: myhttpArchitecture: anyPre-Depends: dpkg (>= 1.16.1), python3.7, ${misc:Pre-Depends}Depends: ${misc:Depends}Description: http client Useful for doing stuff

那么這些是什么信息呢?正如 Debian 文檔指出的:

“第 1&ndash;7 行是源碼包的控制信息。第 9&ndash;13 行是二進(jìn)制包的控制信息。”

以下是我使用的:

  • Section 的值對(duì)于我們來說大多沒有意義,但需要存在。它對(duì)給引導(dǎo)式 UI 安裝程序提供信息是有意義的,但對(duì)于這個(gè)包來說,沒有意義。

  • Priority 對(duì)像這樣的第三方包的正確值是 extra

  • 強(qiáng)烈建議在 Maintainer 字段中填寫正確的聯(lián)系人信息。但不一定非得是你的個(gè)人電子郵件,如果包由團(tuán)隊(duì)維護(hù),并且你希望將問題發(fā)送到團(tuán)隊(duì)的郵件別名,例如 Infrastructure Team <infra-team-list@company.example.com>。

  • Build-Depends 字段標(biāo)識(shí)你需要 debhelperpythondh-virtualenv 來構(gòu)建包:包構(gòu)建過程中將確保這些依賴項(xiàng)在包構(gòu)建時(shí)已安裝。

  • Standards-Version 字段主要給人看。它表明你遵循的指南。本指南基于 dh-virtualenv 的官方文檔,它是基于 Debian 的 3.9.5 指南。最好一直將源碼包和二進(jìn)制包命名相同。

  • Architecture 字段應(yīng)為 Any,因?yàn)槌翘摂M環(huán)境可能包含一些特定于體系結(jié)構(gòu)的文件。否則,最好選擇該字段為 any。

  • 保持 Pre-Depends 列表不變:它是一種非常嚴(yán)格的依賴關(guān)系形式,你很少會(huì)需要比這里建議的最小依賴更多的依賴項(xiàng)。依賴項(xiàng)通常由構(gòu)建系統(tǒng)準(zhǔn)確計(jì)算,因此沒有理由手動(dòng)指定它們。

  • 如果你的包主要用于內(nèi)部,那么 Description 字段可能只需要最少的信息或者指向公司 wiki 的鏈接,不然更多的信息會(huì)更有用。

然后創(chuàng)建 debian/compat 文件,它主要出于歷史目的而存在:

$ echo "9" > debian/compat

接下來,創(chuàng)建更新日志以告知包用戶自上次發(fā)布以來發(fā)生了什么變化。最簡(jiǎn)單的方法是使用 dch --create 創(chuàng)建模板,然后填寫值。

填寫后,它看起來像:

myhttp (2.0.0-1) stable; urgency=medium   * Initial release.  -- Jan Doe <jandoe@example.org>  Fri, 27 Mar 2020 01:09:22 +0000

現(xiàn)在你需要告訴工具安裝 HTTPie,但是哪個(gè)版本?

創(chuàng)建一個(gè)寬松版本的 requirements.in 文件:

httpie

通常,寬松的需求文件將僅包含項(xiàng)目的直接依賴項(xiàng),并在需要時(shí)指定最低版本。不一定總是需要指定最低版本:這些工具通常偏向于將依賴關(guān)系轉(zhuǎn)化為“可能的最新版本”。如果你的  Debian 包與一個(gè)內(nèi)部 Python 包相對(duì)應(yīng),這是內(nèi)部應(yīng)用中的一種常見情況,那么寬松的需求文件看起來將很相似:僅包含包名的一行。

然后使用 pip-compile(可通過安裝 PyPI 包 pip-tools 獲得):

$ pip-compile requirements.in > requirements.txt

這會(huì)生成一個(gè)嚴(yán)格的依賴文件,名為 requirements.txt

## This file is autogenerated by pip-compile# To update, run:##    pip-compile requirements.in#certifi==2019.11.28       # via requestschardet==3.0.4            # via requestshttpie==2.0.0             # via -r requirements.inidna==2.9                 # via requestspygments==2.6.1           # via httpierequests==2.23.0          # via httpieurllib3==1.25.8           # via requests

最后,寫一個(gè) debian/rules 文件來創(chuàng)建包。因?yàn)?dh_virtualenv 會(huì)處理所有困難的事,因此規(guī)則文件很簡(jiǎn)單:

#!/usr/bin/make -f %:        dh $@ --with python-virtualenv --python /usr/bin/python3.7

確保指定 Python 解釋器。默認(rèn)它會(huì)使用 /usr/bin/python,這是 Python2,但是你應(yīng)該使用一個(gè)受支持的 Python 版本。

完成了,接下來就是構(gòu)建包:

$ debuild -b -us -uc

這會(huì)在父目錄生成一個(gè)類似 myhttp_2.0.0-1_amd64.deb 的文件。該文件可在任何兼容的系統(tǒng)上安裝。

通常,最好在同一平臺(tái)上構(gòu)建用于特定平臺(tái)(例如 Debian 10.0)的 Debian 包。

你可以將此 Debian 包保存在軟件倉庫中,并使用例如 Ansible 的工具將其安裝在所有相關(guān)系統(tǒng)上。

給基于 Debian 的系統(tǒng)的打包應(yīng)用是一個(gè)有著多個(gè)步驟的過程。使用 dh_virtualenv 將使過程變得簡(jiǎn)單明了。

以上就是怎樣為L(zhǎng)inux打包Python應(yīng)用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI