当前位置: 首页 > ds >正文

香橙派3B学习笔记7:snap安装管理软件包_打包程序与依赖

有时可以尝试把程文件与其依赖一块打包安装,这里就学习一下。

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()

它本身实现的功能是:

  1. 发送 GET 请求到 GitHub API。
  2. 打印 API 的响应状态码(如 200 表示成功)。
  3. 如果直接运行脚本,会输出类似:
    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 .
  1. 读取配置:Snapcraft 读取当前目录下的 snapcraft.yaml 文件。
  2. 创建构建环境:Snapcraft 会创建一个干净的构建沙箱,避免污染系统。
  3. 安装依赖:根据 snapcraft.yaml 中的 parts 定义,安装应用程序及其依赖项。
  4. 打包:将所有内容打包成一个 .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 测试运行:

http://www.xdnf.cn/news/13088.html

相关文章:

  • day 48
  • 注意高温陷阱?---可恢复保险丝应用失效案例分享
  • 自动交换两个文件的文件名 VSB脚本技巧 电脑技巧
  • 操作系统期末版
  • 免杀对抗--PE文件结构
  • 汽车车载软件平台化项目规模颗粒度选择的一些探讨
  • 【学习笔记】TLS
  • 贝叶斯医学分析中“先验”的如何进行选择(文献解读)
  • Java【基础篇0】
  • java中装饰模式
  • Go内存池设计与实现:减少GC压力
  • ASM,LVM,扫描并扩容步骤-linux
  • 什么是双脉冲测试?
  • 【C++】第十一节—一文详解vector(使用+杨辉三角+深度剖析+模拟实现+细节详细补充)
  • 为什么要引入内联函数?
  • Python Selenium登录网易邮箱
  • FastAPI实战起步:从Python环境到你的第一个“Hello World”API接口
  • day 18进行聚类,进而推断出每个簇的实际含义
  • token和md5
  • Spring Boot 完全指南:快速构建企业级应用
  • vue中Echarts的使用
  • 【评测】Qwen3-Embedding模型初体验
  • frida Hook入门
  • [FreeRTOS]1.FreeRTOS基础知识
  • Java处理字符数组转换为开始日期和结束日期
  • 【学习笔记】深入理解Java虚拟机学习笔记——第3章 垃圾收集器与内存分配策略
  • LLMs之MCP:《Evaluation Report on MCP Servers》翻译与解读
  • 『uniapp』自定义隐私政策弹窗 调整颜色和多语言国际化支持超链接 演示本地插件的使用,和一般性的插件自定义(保姆级图文)
  • CppCon 2015 学习:Live Lock-Free or Deadlock
  • AI架构师修炼之道