您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎樣為Linux打包Python應用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
在基于 Debian 的操作系統(例如 Debian 或 Elementary OS)上安裝 Python 應用的一種方法是使用 dh_virtualenv 工具。它可以構建一個
.deb
包,在應用之外封裝了一個 Python 虛擬環境,并在安裝時進行部署。
首先,你需要安裝 dh_virtualenv
所需的工具。dh_virtualenv
的文檔提供了所有安裝選項。在基于 Debian 的系統上,我輸入:
apt-get install dh-virtualenv devscripts
盡管不需要 devscripts 包,但它可以簡化后續操作。
現在,創建一個目錄來保存源碼。由于這是一個本地的、非官方的 HTTPie 打包,因此我將其稱為 myhttp
。接下來,讓我們在 myhttp
內創建一些文件,向 Debian 構建系統提供元數據。
首先,創建 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–7 行是源碼包的控制信息。第 9–13 行是二進制包的控制信息。”
以下是我使用的:
Section
的值對于我們來說大多沒有意義,但需要存在。它對給引導式 UI 安裝程序提供信息是有意義的,但對于這個包來說,沒有意義。
Priority
對像這樣的第三方包的正確值是 extra
。
強烈建議在 Maintainer
字段中填寫正確的聯系人信息。但不一定非得是你的個人電子郵件,如果包由團隊維護,并且你希望將問題發送到團隊的郵件別名,例如 Infrastructure Team <infra-team-list@company.example.com>
。
Build-Depends
字段標識你需要 debhelper
、python
和 dh-virtualenv
來構建包:包構建過程中將確保這些依賴項在包構建時已安裝。
Standards-Version
字段主要給人看。它表明你遵循的指南。本指南基于 dh-virtualenv
的官方文檔,它是基于 Debian 的 3.9.5 指南。最好一直將源碼包和二進制包命名相同。
Architecture
字段應為 Any
,因為除非虛擬環境可能包含一些特定于體系結構的文件。否則,最好選擇該字段為 any
。
保持 Pre-Depends
列表不變:它是一種非常嚴格的依賴關系形式,你很少會需要比這里建議的最小依賴更多的依賴項。依賴項通常由構建系統準確計算,因此沒有理由手動指定它們。
如果你的包主要用于內部,那么 Description
字段可能只需要最少的信息或者指向公司 wiki 的鏈接,不然更多的信息會更有用。
然后創建 debian/compat
文件,它主要出于歷史目的而存在:
$ echo "9" > debian/compat
接下來,創建更新日志以告知包用戶自上次發布以來發生了什么變化。最簡單的方法是使用 dch --create
創建模板,然后填寫值。
填寫后,它看起來像:
myhttp (2.0.0-1) stable; urgency=medium * Initial release. -- Jan Doe <jandoe@example.org> Fri, 27 Mar 2020 01:09:22 +0000
現在你需要告訴工具安裝 HTTPie,但是哪個版本?
創建一個寬松版本的 requirements.in
文件:
httpie
通常,寬松的需求文件將僅包含項目的直接依賴項,并在需要時指定最低版本。不一定總是需要指定最低版本:這些工具通常偏向于將依賴關系轉化為“可能的最新版本”。如果你的 Debian 包與一個內部 Python 包相對應,這是內部應用中的一種常見情況,那么寬松的需求文件看起來將很相似:僅包含包名的一行。
然后使用 pip-compile
(可通過安裝 PyPI 包 pip-tools
獲得):
$ pip-compile requirements.in > requirements.txt
這會生成一個嚴格的依賴文件,名為 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
最后,寫一個 debian/rules
文件來創建包。因為 dh_virtualenv
會處理所有困難的事,因此規則文件很簡單:
#!/usr/bin/make -f %: dh $@ --with python-virtualenv --python /usr/bin/python3.7
確保指定 Python 解釋器。默認它會使用 /usr/bin/python
,這是 Python2,但是你應該使用一個受支持的 Python 版本。
完成了,接下來就是構建包:
$ debuild -b -us -uc
這會在父目錄生成一個類似 myhttp_2.0.0-1_amd64.deb
的文件。該文件可在任何兼容的系統上安裝。
通常,最好在同一平臺上構建用于特定平臺(例如 Debian 10.0)的 Debian 包。
你可以將此 Debian 包保存在軟件倉庫中,并使用例如 Ansible 的工具將其安裝在所有相關系統上。
給基于 Debian 的系統的打包應用是一個有著多個步驟的過程。使用 dh_virtualenv
將使過程變得簡單明了。
以上就是怎樣為Linux打包Python應用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。