Ubuntu20.04 pycharm python打包制作DEB包详细步骤及雷区
記錄一次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 testPackage:你的包名
Version:版本
Architecture:架構
Maintainer:維護者
Description:解釋
括號后的內容 根據你自己的需要去改變
然后保存
2.在/usr/share/applications下制作桌面圖標 debpacktest.desktop
這一步非常重要 關系到你能否在應用列表出現你自己的程序,清一定按照下面的步驟完成。
首先在/usr/share/applications/下新建debpacktest.desktop這個文件。
里面的內容是:
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文件要有可執行權限!
為一個文件添加可執行權限
3.打包
到這里,一個基本的deb軟件包就大功告成了。
我們返回到debpackTotal的上級目錄。我們執行
包的命名要符合規范,我這里是隨便打的。
檢驗的話,可以輸入(安裝deb包)
在我的ubuntu機器上,運行很完美,我在應用列表里看到了我的程序。
如果要卸載,請執行
注意 這里面的參數 是包名,并非包的文件名,就是一開始我讓你們注意的那個全局命名。
關于postinst文件(即制作桌面圖標)
cd到DEBIAN目錄,新建postinst文件,沒有后綴。這個文件是在安裝完包以后執行的腳本
復制以下內容:
這里是在包安裝完成后,執行代碼,將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包详细步骤及雷区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核2.6.35编译过程
- 下一篇: MFC串口通信设置及发送、中断接收程序