有時可以嘗試把程文件與其依賴一塊打包安裝,這里就學習一下。
ssh? : orangepi@本地ip
密碼 : orangepi操作系統發行版: 基于 Ubuntu 20.04.6 LTS(Focal Fossa)的定制版本,專門為 Orange Pi 設備優化。PRETTY_NAME="Orange Pi 1.0.6 Focal"
目錄
示例程序:
snap介紹:
Snap 部署:
安裝 Snapcraft 工具:
檢查Snap狀態:
創建 Snapcraft 定義文件:
賦予文件讀寫權限:
創建snap調用目錄:
構建snap包:
解包測試:
輸入命令測試運行:
示例程序:
這是一段示例Python程序,他需要 requests這個依賴包,如何打包整個程序與依賴:
#!/usr/bin/env python3 import requests # 示例依賴def main():response = requests.get('https://api.github.com')print(f"Hello! GitHub API status: {response.status_code}")if __name__ == "__main__":main()
它本身實現的功能是:
- 發送 GET 請求到 GitHub API。
- 打印 API 的響應狀態碼(如
200
表示成功)。- 如果直接運行腳本,會輸出類似:
Hello! GitHub API status: 200
snap介紹:
?Snap 包是一種自包含的軟件包格式,它不僅包含應用程序的可執行文件,還包括所有依賴項(如庫、運行時環境等),從而確保應用程序在不同環境中能夠一致地運行。
Snap 包是一個獨立的文件系統,包含了應用程序所需的所有文件和依賴項。
這意味著應用程序在運行時不會依賴宿主系統上的庫或環境,減少了因依賴沖突導致的問題。
Snap 部署:
不管是目標機器還是打包程序依賴的機器,都得先安裝這個snap的支持:
sudo apt-get update
sudo apt install snapd
安裝 Snapcraft 工具:
只有打包程序的機器需要安裝 Snapcraft 工具
而目標機器(即運行 Snap 包的機器)不需要安裝 Snapcraft,但需要安裝 Snap 運行時環境(即 Snap 守護進程)
sudo snap install snapcraft --classic
檢查Snap狀態:
systemctl status snapd
創建 Snapcraft 定義文件:
在與程序文件統一目錄下,創建一個名為
snapcraft.yaml
的文件:
name: test-app# Snap 包名稱 version: '0.1'# 版本號 summary: Test app# 簡短描述 description: A simple test application.# 詳細描述 base: core22 grade: stable# 發布級別(stable 或 devel) confinement: strict# 安全限制級別(strict 或 classic)parts:test-app:plugin: python# 使用 Python 插件source: .# 源代碼位置(當前目錄)python-packages: - requests# 指定 Python 依賴apps:test-app: #app 包名稱command: request.py# 啟動命令,這里改成自己的python文件名plugs:- network# 允許網絡訪問 請求網絡訪問權限
但別復制上面帶注釋的,會有utf-8報錯,復制下面的:
name: test-app version: '0.1' summary: Test app description: A simple test application. base: core22 grade: stable confinement: strictparts:test-app:plugin: pythonsource: .python-packages: - requestsapps:test-app:command: request.pyplugs:- network
賦予文件讀寫權限:
之前的程序文件需要賦予一下讀寫權限
chmod +rwx request.py
創建snap調用目錄:
還是在之前的文件夾目錄,創建meta文件夾
mkdir -p meta
完后將
snapcraft.yaml復制進去
cp snapcraft.yaml meta/snap.yaml
構建snap包:
進入包含 snapcraft.yaml 的目錄,根據
snapcraft.yaml
文件構建 Snap 包。最后的 . 表示就在當前目錄生成
snapcraft pack .
- 讀取配置:Snapcraft 讀取當前目錄下的
snapcraft.yaml
文件。- 創建構建環境:Snapcraft 會創建一個干凈的構建沙箱,避免污染系統。
- 安裝依賴:根據
snapcraft.yaml
中的parts
定義,安裝應用程序及其依賴項。- 打包:將所有內容打包成一個
.snap
文件(如hello-app_1.0_amd64.snap
)。
然后就會生成一個打包好的snap文件:
解包測試:
現在復制之前構建好的snap包到別的目錄進行解包測試:
cp test-app_0.1_all.snap /home/orangepi/snap_packet_test/test_1/
進入該目錄
cd /home/orangepi/snap_packet_test/test_1/
安裝軟件包:
sudo snap install --dangerous test-app_0.1_all.snap
刪除軟件包:(別運行,這部只是提示有這個操作)
sudo snap remove test-app
輸入命令測試運行:
輸入?test-app 測試運行: