![99aaf72082badc2c8bed2a664b38b66f.png](https://i-blog.csdnimg.cn/blog_migrate/efbe35587b5522727677f42de7585d23.jpeg)
前几天,在Ubuntu下,用Pyinstaller打包wxPython开发的桌面系统时,遇到不少坑。趁这两天有时间,整理出来并分享给你。
1
好在Ubuntu新版本,比之前的完善了n多倍,安装方便了很多,否则…,否则怎么样?-- 否则照样折腾。
Ubuntu就是不像Windows那样傻瓜化,不像Mac OS那样高大尚,才让程序员觉得更好玩,别有一番滋味在心头。
好了,闲话就说这么多,干活才是硬道理。
2
到官网下载Python3.7.2安装包,点击【Gzipped source tarball】链接,下载源代码,并解压缩到主目录下。打开【终端】,安装依赖包。
#安装GCC
sudo apt-get install build-essential
#安装ssl
sudo apt-get install openssl libssl-dev
#安装libffi
sudo apt-get install libffi-dev
#安装zlib
sudoapt-getinstallzlib1g-dev
![bb5f6a582416503e982668efa7104e60.png](https://i-blog.csdnimg.cn/blog_migrate/c1d785799df177544b56282af00aba93.jpeg)
3
编译并安装Python,默认安装在:/usr/local下。cd到Python源码目录里。
#生成Makefile文件
sudo ./configure --with-ssl
#编译程序
sudo make
#安装程序
sudo make install
![616af7b2e11adae4712149f0fdf4f569.png](https://i-blog.csdnimg.cn/blog_migrate/05aa670f2e85e2bc36c922caffb4a529.jpeg)
安装完成后,在【终端】输入python3,确认一下。确实是改成Python 3.7.2了,并自动设置为default(默认)了。
![38946bffc088d12c256e7df00d22de5f.png](https://i-blog.csdnimg.cn/blog_migrate/13c51da6d25aa59418a93fa1ddb9b442.jpeg)
4
安装完Python后,自带了pip3(通用的Python 包管理工具。提供了对Python 包的查找、下载、安装、卸载的功能)。很多python的大多数开发包,被统一放在Python仓库里。需要时,通过pip/pip3去获取。
在Ubuntu上获取wxPython,跟Mac OS和Windows是不同的,不是:pip3 install -U wxPython ,这样会报错,踩坑1。
#----正确命令----------
sudo pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3
/ubuntu-18.04/ wxPython
![4eb1c836bfc3d97344d08f377f3af261.png](https://i-blog.csdnimg.cn/blog_migrate/885800e5b1c99fdbb14d817835a80e3d.jpeg)
5
下载wxPython时,最后有提示pip3不是最新版的。升级命令是:sudo pip3 install --upgrade pip 。自作聪明把后面的pip改成pip3了,踩坑3。
#--------升级命令--------
sudo pip3 install –U --upgrade pip
![1518d603bf6a78101288bda7d17605d4.png](https://i-blog.csdnimg.cn/blog_migrate/180bc074f09effdde69fd57fe5bf0092.jpeg)
6
假装很厉害的样子,手写一个wxPython的窗口程序。打开【文本编辑器】输入内容并保存为:main.py
# main.py
import wx
app = wx.App()
frame = wx.Frame(None, )
frame.Show()
app.MainLoop()
![2736d13593652a323480798ab7499de3.png](https://i-blog.csdnimg.cn/blog_migrate/b41f4043b202cf5462c891b3909d84b5.jpeg)
打开【终端】,用python3运行main.py文件,看看效果。成功的,没问题。
![87bb57adf47276e4b48d9108e64f910e.png](https://i-blog.csdnimg.cn/blog_migrate/e2d0f59dfc9e0e494f9bc9831838ca14.jpeg)
7
打包需要有专门的工具:Pyinstaller,再次发挥pip3的力量。获取Pyinstaller并进行安装。命令是:sudo pip3 install pyinstaller。
![ab2c89f7668057ddf16b994a2be4628d.png](https://i-blog.csdnimg.cn/blog_migrate/61efd2e08d2cf4d53fb2b8d20bfead0d.jpeg)
开始打包,命令:pyinstaller –F main.py 。打包关键参数有-F、-D,它们的区别:-F打包成一个文件,-D文件分开(依赖包、资源、运行文件等)。结果报错了,提示缺少了三个依赖文件:libpython3.7mu.so.1.0,libpython3.7m.so.1.0,libpython3.7.so.1.0,踩坑4。解决方法,底部有提示,就是在编译python时,需要提供参数:--enable-shared。
![ade274d81ab18087fe68da0c3a88e448.png](https://i-blog.csdnimg.cn/blog_migrate/433d5e41f1909db79e14ec7240c6f879.jpeg)
8
那就重新编译吧。心若在梦就在,只不过是从头再来。你说来就来,让编译飞一会。
sudo ./configure --enable-shared
sudo make
sudo make install
稍等片刻,再次进行打包操作。涛声依旧,命令还是:sudo pyinstaller -F main.py,这下可以了么?--不行,又碉堡了。提示错误…libpython3.7m.so.1.0… No such file or directory。意思就是没有这个文件,踩坑5 。
![4200dc86f5e509a93527cfbdcfa5a249.png](https://i-blog.csdnimg.cn/blog_migrate/c067f1f8ebed467d2195da27198c9338.jpeg)
Ubuntu下,编译依赖的文件,一般是放在/usr/lib下的。既然提示缺少文件,那就把它复制过去。打开【终端】,cd Python-3.7.2。sudo cp libpython3.7m.so.1.0 /usr/lib进行复制。
![7bf3908aa7359e33fb9862bc9f0873ba.png](https://i-blog.csdnimg.cn/blog_migrate/3f61ce0edacd548997f2d42af3e0fe03.jpeg)
9
打开【终端】,再次运行打包命令:sudo pyinstaller -F main.py。沧海月明珠有泪,蓝田日暖玉生烟,皇天不负有心人,真不容易,终于可以了。
![92f0d8f8bbca6a8155c8dbb3964cc72d.png](https://i-blog.csdnimg.cn/blog_migrate/0988dfe47938cf2cced08a741fb5c6d4.jpeg)
按捺不住喜悦,赶紧跑到主目录下的dist,一探究竟。有个文件,安静的躺在那里,等你呼喊它。双击试试。成了,成了…留下了幸福的眼泪。
![751516fa79ab4f2ee5eda4c0f9a1e9da.png](https://i-blog.csdnimg.cn/blog_migrate/5977218833b957db05b6a07da194e78d.jpeg)