记录一次Deb打包过程及踩雷警示

最近写了一个python的小程序,希望能打包成deb文件,便于将写好的软件安装 在其他没有安装工作环境的电脑上,把这安装deb后可以在应用列表和桌面看到。下面介绍一个python工程的打包过程, 分为两大步骤:

1、将工程打包生成一个可执行文件;
2、将可执行文件和工程依赖的所有文件制作成.deb安装包。

需要准备的

1、源代码(前提要可执行)或者编译好的程序,这里只介绍python
2、能用的ubuntu系统
3、用户的密码
4、图标(一定要有!)

这里给大家介绍一个案例,包名叫做debpacktest,整个过程中所有用到名字的地方,统统都是这个名字。xxx也指代这个名字。

一、 将工程打包生成一个可执行文件
1.在pycharm中安装pyinstaller

2.在工作代码区,鼠标右键调出terminal终端,输入命令pyinstaller -F -w main.py 点击回车,会看到成功提示(main.py 是主文件名)

备注:

pyinstaller -F main.py  打包ubuntu下的可执行文件
pyinstaller -F -w main.py  不带控制台的打包
pyinstaller -F -w -i Aplication.ico main.py  打包指定ubuntu下的可执行文件的图标打包

3.将工程里面除了.py文件(作用:保留源码)外的所有依赖文件(如数据文件)按原来在工程中的目录 拷贝到当前目录的/test/dist/test下,在其他工作目录下运行可执行文件(如/usr/test(绝对路径)),看是否可以执行,若不能运行,可能是以下原因:
(1)、路径中有汉字;
(2)、你的python程序中有路径不会随文件目录变化而变化;
(3)、依赖文件没有拷贝或拷贝不完整。

二、将可执行文件和工程依赖的所有文件制作成.deb安装包。

1.建立目录架构

程序是要放到一个系统中的各个部分去的。其实这个并没有那么严格,不一定全都要挤到/usr/lib里边去,放到/home等都没有太大的问题。这里你需要用一个文件夹模拟出linux的文件架构,只需要模拟你程序需要安放到的位置就行了。比如说我有可执行文件和工程依赖的所有文件,放到的文件夹是/usr/lib/debpacktest。那么我只需要建一个大文件夹(命名随意),cd到这个大文件夹,直接一个mkdir新建/usr /lib /debpacktest,然后把可执行文件和工程依赖的所有文件丢进debpacktest文件夹。下面罗列出来的是目录结构,多余出来的是需要手工添加的deb包配置文件(夹)。(share部分和DEBIAN部分)

├── debpackTotal
│   ├── DEBIAN(这个目录要添加control文件(无后缀名),可选添加postinst等)
│   └── usr
│       ├── lib
│       │   └── debpacktest(预定要安装到系统中的可执行文件和工程依赖的所有文件)
│       │       └── main等
│       └── share
│           ├── applications(在这里添加xxx.desktop,使应用中能够加载出你的应用)
│           └── icons(你的图标,这个必须有) **踩雷一**

在DEBIAN目录下制作control文件

cd到DEBIAN,在命令行输入(当然,你用gedit也行)

vim control

在其中粘贴:

Package: debpacktest
Version: 1.0.0
Architecture: amd64
Maintainer: gao
Description: just a test

Package:你的包名
Version:版本
Architecture:架构
Maintainer:维护者
Description:解释

括号后的内容 根据你自己的需要去改变
然后保存

2.在/usr/share/applications下制作桌面图标 debpacktest.desktop

这一步非常重要 关系到你能否在应用列表出现你自己的程序,清一定按照下面的步骤完成。
首先在/usr/share/applications/下新建debpacktest.desktop这个文件。
里面的内容是:

[Desktop Entry]
Name=debpacktest
Comment=An example
Exec=/usr/lib/debpacktest/main
Icon=/usr/share/icons/debpacktest.ico
Terminal=false
Type=Application
X-Ubuntu-Touch=true
Categories=Development

Name:你的包名

Comment:评论 注释

Exec:这里非常重要!这里如果不对 会直接导致这个图标没有办法显示。对于python来说,一定要具体到执行哪个可执行文件。这里执行的是main。不要忘记chmod +x 文件名,给main加上可执行权限(用pyinstaller打包生成都有可执行权限)。踩雷二

Icon:图标,不可以忽略 踩雷三

Terminal:是否在终端执行。这里是QtPy窗体,不需要。如果需要的话可以参考vim的desktop文件 踩雷四

X-Ubuntu-Touch这个暂时我也不知道是什么用的

Categories:分类。Categories可以取以下值,表示程序的启动快捷方式放在哪个菜单下:应用菜Application; Network放在 互联网 (Internet);办公 Office;图形 Graphics;声音和视AudioVideo; 系统工具 System;编程 Development; 附件Utility;影音 AudioVideo;游戏 Game;首 选项 Settings(GNOME;GTK;Settings;HardwareSettings;); 系统管理System。

剩下的东西 都不要动 都不要动
文件不能有多余的空格! 踩雷五
desktop文件要有可执行权限!

为一个文件添加可执行权限

chmod +x filename

3.打包

到这里,一个基本的deb软件包就大功告成了。
我们返回到debpackTotal的上级目录。我们执行

sudo dpkg -b debpackTotal debpacktest_1.0.0_amd64.deb

包的命名要符合规范,我这里是随便打的。
检验的话,可以输入(安装deb包)

sudo dpkg -i debpacktest_1.0.0_amd64.deb

在我的ubuntu机器上,运行很完美,我在应用列表里看到了我的程序。
如果要卸载,请执行

sudo dpkg -r debpacktest

注意 这里面的参数 是包名,并非包的文件名,就是一开始我让你们注意的那个全局命名。

关于postinst文件(即制作桌面图标)

cd到DEBIAN目录,新建postinst文件,没有后缀。这个文件是在安装完包以后执行的脚本
复制以下内容:

#!/bin/bash
sudo cp /usr/share/applications/debpacktest.desktop ~/桌面
echo POST INSTALLATION FUNCTION EXECUTED

这里是在包安装完成后,执行代码,将desktop文件复制到桌面。不同语言的发行版需要注意桌面的路径。踩雷六
postinst要有可执行权限。踩雷七

重新打包,安装,检验,发现桌面上多了个东东,是我们复制过去的文件,但并没有显示图标。
我们需要右击它,选择允许执行。你想要的结果便出现了。

总结:
以上就是简单制作一个基本的deb文件的全部步骤以及部分扩展。需要耐心。Enjoy it.

GLIBC问题:
这两天我在本公司服务器上(Linux)打包Python代码,然后拷贝到我自己的虚拟机上就无法执行,报错内容如下:

[3513] Error loading Python lib ‘/tmp/_MEIwj9Y1X/libpython3.6m.so.1.0’: dlopen: /lib64/libc.so.6: version `GLIBC_2.25’ not found (required by /tmp/_MEIwj9Y1X/libpython3.6m.so.1.0)

大体意思是:libpython3.6m.so.1.0这个依赖库需要依赖2.25版本或者以上的GLIBC。于是我在命令终端

ldd --version

查了一下我自己虚拟机的GLIBC和公司服务器上的GLIBC 发现我自己的虚拟机上是2.17版本,公司服务器上是2.27版本 于是原因就明白了

原因是:打包时的GLIBC是高版本,因此打包出来的可执行文件所依赖的也是高版本,所以在GLIBC低版本的 Linux系统中就无法执行

我的解决方法:在低版本GLIBC的系统上打包好,这样就都可以运行了

参考&引用:
https://my.oschina.net/u/4323266/blog/4537886
https://blog.csdn.net/yangjian131/article/details/78078853
https://blog.csdn.net/wangziyang777/article/details/107365606

Ubuntu20.04 pycharm python打包制作DEB包详细步骤及雷区相关推荐

  1. python脚本制作deb包_Deb包的制作 | 学步园

    deb格式是Debian系专用安装包格式,配合APT软件管理系统,成为了当前在linux软件中非常流行的一种安装包.Debian和ubuntu软件安装用的都是deb包. 但是很多人制作deb包时,都是 ...

  2. ubuntu20.04 部署原生态openstack Victoria版的详细步骤

    1: 环境介绍 . controller 192.168.0.220 172.16.10.220 10.10.10.20 10.1.1.220 . compute1 192.168.0.221 172 ...

  3. Ubuntu16.04下制作deb包的方法详解

    CSDN GitHub Ubuntu下制作deb包的方法详解 AderXCoding/system/tools/build_deb 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可 ...

  4. linux下打包deb文件,制作deb包的三种方法

    制作deb包的三种方法 发布时间:2008-06-10 16:05:39来源:红联作者:Mhynan 我所知道的制作deb包有三种方法,一种是将现有的文件打包,安装该包就像将打包的文件释放到某个目录: ...

  5. linux 制作deb包的三种方法

    一.使用deb包 1. 查看deb包含有哪些文件(不安装) $ dpkg -c xxx.deb // 安装前根据deb文件查看 $ dpkg -L debname // 安装后根据包名查看 2. 安装 ...

  6. 自己制作deb包(转)

    一.使用deb包 1. 查看deb包含有哪些文件(不安装) $ dpkg -c xxx.deb // 安装前根据deb文件查看 $ dpkg -L debname // 安装后根据包名查看 2. 安装 ...

  7. fceux源码解析_fceux源码解析_从源代码制作deb包的两种方法以及修改已有deb包(转载)...

    1. 原理 1) deb包通常包含两部分:控制信息(DEBIAN目录).安装内容(模拟"/"目录) 2) 通过解开已有的deb包看其中内容 i. 释放安装内容到dirname目录中 ...

  8. OS / Linux / 制作 deb 包

    一.deb 简介 deb 是 debian 系列系统下的安装包,基于 tar 包,因此本身会记录文件的权限(读 / 写 / 可执行)以及所有者 / 用户组. 由于 Unix 类系统对权限.所有者.组的 ...

  9. fceux源码解析_从源代码制作deb包的两种方法以及修改已有deb包(转载)

    1. 原理 1) deb包通常包含两部分:控制信息(DEBIAN目录).安装内容(模拟"/"目录) 2) 通过解开已有的deb包看其中内容 i. 释放安装内容到dirname目录中 ...

最新文章

  1. mysql减少锁等待_降低锁竞争 减少MySQL用户等待时间
  2. php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...
  3. TCP与UDP区别小结
  4. 排个课表学会了拓扑排序!有点意思
  5. Asp.net动态加载控件的一些问题
  6. SimpleExecutor.doQuery()-创建Statement
  7. SAP CRM orgman set的更改会触发Pricing set的创建
  8. create new page group - ST05
  9. Spring4.3x教程之一IOCDI
  10. CentOS7 使用 firewalld 打开关闭防火墙与端口
  11. Android应用开发(11)---动画资源
  12. P3512 [POI2010]PIL-Pilots
  13. 影片剪辑app android,猫饼剪辑app
  14. Thymeleaf即时生效
  15. 国税计算机专业面试题,2018年国家公务员考试:国税系统面试题
  16. The right to contest automated decisions under the General Data Protection Regulation: Beyond the so
  17. Android全面屏适配笔记
  18. 欧盟GDPR通用数据保护条例-原文
  19. 中冠百年|年轻人收入低如何理财
  20. Kafka 的 ISR 副本同步队列

热门文章

  1. JS事件的捕获和冒泡阶段
  2. Problem H: 今年第几天?
  3. maven安装及集成myeclipse
  4. centos不能挂在ntfs
  5. oracle中保留2位小数的写法
  6. LVM( Logical Volume Manager )配置案例(on RHEL4)
  7. Javascript 仿Flash 图片切换 及 Flash 图片切换
  8. centos 6 mysql 5.7.13 编译安装_Centos 6.5 下面 源码编译 安装 Mysql 5.7.13
  9. 如何用python生成可执行程序必须经过_python怎么生成可执行文件
  10. 多麦克风做拾音的波束_麦克风丨人声应该用动圈话筒还是电容话筒?