我的使用过程,确切地说是折磨过程。
环境: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都比较新,这方面的资源还是少,就发出来,希望对有些朋友有用。