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

香橙派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 测试运行:

相关文章:

  • 曼昆《经济学原理》第九版 第七章消费者、生产者与市场效率
  • LLMs 系列科普文(7)
  • css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?
  • 【Java实战】反射操作百倍性能优化
  • wsl开启即闪退
  • 空间转录组数据下游分析(二)
  • Prompt Enginering(提示工程)先进技术
  • MAC-安装Homebrew、安装Git
  • OPENCV形态学基础之一膨胀
  • mac:大模型系列测试
  • STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
  • 飞算 JavaAI 2.0.0:开启老项目迭代维护新时代
  • SpringBoot自定义EndPoint实现线程池动态管理
  • 【C++系列】模板类型特例化
  • Kotlin REPL初探
  • 多线程语音识别工具
  • 【版本控制】Git 和 GitHub 入门教程
  • 历史数据分析——辽港股份
  • Linux--vsFTP配置篇
  • Python 接口:从协议到抽象基 类(Tombola子类的测试方法)
  • 建设网站以后怎么让百度收录呢/工作手机
  • 重生主角做视频网站的小说/百度关键词怎么刷上去
  • 网站建设_网站设计 app制作/全媒体运营师报考条件
  • 合肥大型网站建设公司/西安百度快照优化
  • 网站制作新技术/网购平台推广方案
  • 网站开发出来为什么加载特别慢/公司网页制作模板