您的位置:首页 > 运维架构 > Linux

用Python3.4.2+cx_Freeze4.3.3(cxfreeze)编写、打包Linux可执行程序

2014-11-26 12:25 429 查看
我的使用过程,确切地说是折磨过程。环境:Ubuntu 14.04 desktop + python3.4.2+cx_Freeze4.3.3我是想写个程序,能够在Linux下检索文本内容中的固定关键字。但是这脚本不光自己用,还要发布给别的人。这时问题就来了,万一别人的环境下,没有装Python3怎么办呢?在看书的时候发现可以把Python脚本打包成执行程序,于是就打算搞一个,噩梦啊,10天时间啊!(当然,也是我水平不行)首先这脚本是在Windows 7 64bit下写的,并且也是在这个环境下测试的。这环境下Python3.4.2的安装非常简单,官网上应有msi包,直接装即可,运行也没有问题,还带有一个idle的编辑器。写代码的过程略过不提,但是打包的时候这顿折磨啊。首先是在Windows下打包就不断失败,各种报错,主要就是各种找不到库文件之类的。后来发现把cx_Freeze的源代码直接解压到Python3.4的安装目标下scripts子目录下,就能正常运行了,或者在安装的时候(cx_Freeze是有msi包的)选择安装到任意目录,然后选择你的Python3.4安装路径。用cxfreeze.bat -h 测试是好的,但是一运行就说 没有basename这个没有搞定,我想反正是要在Linux下用,就放弃Windows平台的测试,转而进行Linux下的研究。首先第一个问题就是在Linux下,Python2和Python3是同时存在的,对我这个新手的影响很大,经过Ubuntu和CentOS的测试,都没有装成功。最后我还是回到Ubuntu14.04 Desktop,先用dpkg -l | grep python2找到所有的Python相关包,再用sudo apt-get remove python2.7 --purge命令,逐个干掉了Python2.7.8的相关软件包,连gedit都没有放过。然后测试,发现自带的Python3是3.4.0,而且没办法通过apt-get 升级,说已经是最新版了。在此基础上直接编译cx_Freeze说是找不到Python.h,没办法,只好下载Python3.4.2的源码,编译安装。这个过程简单,解压./configuremakesudo make install咦,问题又来了,说是找不zlibNo module name zlib百度半天,一顿中英文资料和求助朋友,感觉是缺库吧。先按网友说的,把zlib1g-dev(其它发行版上不叫这个名的)包装上,然后再:./configure --with-zlib或者./configure --with-zlib=/usr/include
但是这个选项已经无效了,结果试了另一个方法,在Python源码的Module下,有个Setup.dist文件,其中有一行是#zlib zlibimport................去掉注释,重新
./configuremakesudo make install注意,这里要把用过的源代码删掉,重新解压一份再Configure。

然后时行Python环境测试import zlib,没有报错,OK,这关过了这时再去编译cx_Freeze,注意这个是Python的扩展,要在源代码目录下运行:Python3.4 setup.py install来编译。然后就又报错,一堆字符,看看发现是没有找到libpython3.4这个库文件,注意这里它报错说找不到lpython3.4,而不是libpython3.4Python是在/usr/lib/python3.4/config-3.4m/找库文件,但是Ubuntu并没有把库放在这里然后我又重新编译Python,这次用的是
./configure --prefix=/usrmakesudo make install我感觉这是装在系统自带程序的目录里,应该没问题了吧,结果还是找不“lpython3.4”

于是:locate libpython3.4发现这库的直接文件竟然在/usr/lib/i386-linux-gnu下,Ubuntu啊,这是什么文件组织结构啊!!!当然,其它地方还是有链接,我也只能自己做个链接了于是(注意sudo,因为要在系统目录里建链接,普通用户是建不了的):sudo ln -s /usr/lib/i386-linux-gnu/libpython3.4m.so.1.0 /usr/lib/python3.4/config-3.4m/libpython3.4.so
注意名字别打错了哦,错了就闹心了。再来,Python3.4 setup.py install哦又错了,哈哈小毛病,原来系统要把cxfreeze(注意这名字啊,和包的名字不一样)放到/usr/bin下,所以还得:sudo Python3.4 setup.py install
OK了,这回编译通过,直接 :cxfreeze -h 测试也没有问题,把自己的代码搞过来,打包,OK,没问题。哦,哦,别紧张,是我代码有问题了,哈哈,这个过程没问题了。考虑到自己查资料的时候费劲,可能Python3和cx_Freeze4.3.3都比较新,这方面的资源还是少,就发出来,希望对有些朋友有用。

本文出自 “iamluguang” 博客,请务必保留此出处http://iamluguang.blog.51cto.com/1026084/1582730
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: