有时可以尝试把程文件与其依赖一块打包安装,这里就学习一下。
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 测试运行: