我的使用过程,确切地说是折磨过程。

环境: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的源码,编译安装。

这个过程简单,解压

./configure

make

sudo make install

咦,问题又来了,说是找不zlib

No module name zlib

百度半天,一顿中英文资料和求助朋友,感觉是缺库吧。先按网友说的,把zlib1g-dev(其它发行版上不叫这个名的)包装上,

然后再:

./configure --with-zlib

或者

./configure --with-zlib=/usr/include

但是这个选项已经无效了,结果试了另一个方法,在Python源码的Module下,有个Setup.dist文件,其中有一行是

#zlib zlibimport................

去掉注释,重新


./configure

make

sudo make install

注意,这里要把用过的源代码删掉,重新解压一份再Configure。


然后时行Python环境测试import zlib,没有报错,OK,这关过了

这时再去编译cx_Freeze,注意这个是Python的扩展,要在源代码目录下运行:

Python3.4 setup.py install

来编译。

然后就又报错,一堆字符,看看发现是没有找到libpython3.4这个库文件,注意这里它报错说找不到

lpython3.4,而不是libpython3.4

Python是在/usr/lib/python3.4/config-3.4m/找库文件,但是Ubuntu并没有把库放在这里

然后我又重新编译Python,这次用的是


./configure --prefix=/usr

make

sudo 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都比较新,这方面的资源还是少,就发出来,希望对有些朋友有用。