香橙派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.pswp.cn/pingmian/84055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Playwright 测试框架 - .NET

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】

Model Context Protocol (MCP) 是一个前沿框架

微软发布了 Model Context Protocol (MCP) 课程:mcp-for-beginners。 Model Context Protocol (MCP) 是一个前沿框架,涵盖 C#、Java、JavaScript、TypeScript 和 Python 等主流编程语言,规范 AI 模型与客户端应用之间的交互。 MCP 课程结构 …

【量化】策略交易 - 均线策略(Moving Average Strategy)- 代码增强版本

策略交易 - 均线策略(Moving Average Strategy)- 代码增强版本 一、前言 本文主要是针对 【量化】策略交易 - 均线策略(Moving Average Strategy) 中的代码事例,进行逻辑的增强,添加了模拟买入和卖出逻辑&…

为什么要引入内联函数?

C 中引入内联函数主要有以下几个目的: 提高程序运行效率 - 普通函数调用会有一定的开销,如保存现场、传递参数、跳转到函数地址执行等。内联函数在编译时,会将函数体直接插入到调用处,避免了函数调用的开销,从而提高程…

C++.OpenGL (17/64)模型(Model)

模型(Model) 模型系统架构 #mermaid-svg-Zaji5BPdvnIkXIVg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-icon{fill:#552222;}#mermaid-svg-Zaji5BPdvnIkXIVg .error-text{fill:#55222…

【Java学习笔记】System类

System 类 常用方法 方法描述System.exit()退出当前程序System.arraycopy(源数组,源数组起始索引,目标数组,目标数组起始索引,拷贝长度)复制数组元素,比较适合底层调用System.currentTimeMillis()返回当前时间距离 1…

因泰立科技H1X激光雷达:因泰立科技为智慧工业注入新动力

在当今工业领域,精准测量与高效作业是推动产业升级的关键因素。因泰立科技推出的H1X三维轮廓扫描激光雷达,凭借其卓越的性能和广泛的应用场景,正成为智慧工业中不可或缺的高科技装备。 产品简介 H1X三维轮廓扫描激光雷达是因泰立科技基于二维…

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心运行代码 <!DOCTYPE html><html><head><t…

微软PowerBI考试 PL300-使用 Power BI 准备数据以供分析【提供练习数据】

微软PowerBI考试 PL300-使用 Power BI 准备数据以供分析 您将了解如何使用 Power Query 从不同的数据源中提取数据&#xff0c;选择存储模式和连接性类型。 您还将了解在对数据进行建模之前&#xff0c;如何分析、清理数据以及将数据加载到 Power BI 中。 在 Power BI 中获取…

Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决

如果你的Obsidian文档在Linux与Windows间来回切换&#xff0c;可能会涉及到文件的保存换行符问题&#xff0c;但这样的话就容易导致一个问题&#xff0c;那就是内容无差异&#xff0c;Obsidian却提示unexplained changes&#xff0c;Windows系统下的解决方法如下&#xff0c;找…

Python爬虫-爬取各省份各年份高考分数线数据,进行数据分析

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于Python爬虫,爬取各省份历年以来的“各年份高考分数线”进行数据分析。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看…

基于cornerstone3D的dicom影像浏览器 第三十章 心胸比例测量工具CTRTool

文章目录 前言一、实现过程1. 学习CobbAngleTool源码2. 新建CTRTool.js文件3. 重写constructor函数4. 重写defaultGetTextLines函数5. 增加_calculateLength函数6. 重写_calculateCachedStats函数7. 重写renderAnnotation函数 二、使用步骤1.引入库2. 添加到cornerstoneTools3.…

[嵌入式AI从0开始到入土]18_Ascend C算子开发环境(S5赛季)

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

《前端面试题:JavaScript 闭包深度解析》

JavaScript 闭包深度解析&#xff1a;从原理到高级应用 一、闭包的本质与核心概念 闭包&#xff08;Closure&#xff09;是 JavaScript 中最强大且最常被误解的概念之一。理解闭包不仅是掌握 JavaScript 的关键&#xff0c;也是区分初级和高级开发者的重要标志。 1. 什么是闭…

【FPGA开发】DDS信号发生器设计

一、常见IP模块介绍 IP(IntellectualProperty)原指知识产权、著作权等&#xff0c;在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能&#xff08;如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等&#xff09;并且参数可修改的电路模块&a…

板凳-------Mysql cookbook学习 (九--3)

4.3 使用临时表 Drop table 语句来删除表&#xff0c; 选择使用create temporary table 语句&#xff0c;创建的是一张临时表。 Create temporary table tb1_name(…列定义…) 克隆表 Create temporary table new_table like original_table 根据查询结果建表 Create temporary…

Python Web项目打包(Wheel)与服务器部署全流程

目录 一、本地开发环境准备二、创建setup.py打包配置三、创建WSGI入口文件四、打包生成Wheel文件五、服务器端部署流程1. 传输文件到服务器2. 服务器环境准备3. 配置生产环境变量4. 使用Gunicorn启动服务 六、高级部署方案&#xff08;Systemd服务&#xff09;1. 创建Systemd服…

c++ 基于openssl MD5用法

基于openssl MD5用法 #include <iostream> #include <openssl/md5.h> using namespace std; int main(int argc, char* argv[]) { cout << "Test Hash!" << endl; unsigned char data[] "测试md5数据"; unsigned char out[1024…

如何通过外网访问内网服务器?怎么让互联网上连接本地局域网的网址

服务器作为一个数据终端&#xff0c;是很多企事业单位不可获缺的重要设备&#xff0c;多数公司本地都会有部署服务器供测试或部署一些网络项目使用。有人说服务器就是计算机&#xff0c;其实这种说法不是很准确。准确的说服务器算是计算机的一种&#xff0c;它的作用是管理计算…

安装Openstack

基本按照Ubuntu官网的指南来安装&#xff0c;使用单节点模式&#xff0c;官网步骤参见网址&#xff1a;https://ubuntu.com/openstack/install 系统为Ubuntu 24.04.2&#xff0c;全新安装. Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.11.0-24-generic x86_64)kaiexperiment…