用Python3.4.2+cx_Freeze4.3.3(cxfreeze)編寫、打包Linux可執行程序

個人使用過程,確切地說是折磨過程。python

環境:Ubuntu 14.04 desktop + python3.4.2+cx_Freeze4.3.3linux

我是想寫個程序,可以在Linux下檢索文本內容中的固定關鍵字。可是這腳本不光本身用,還要發佈給別的人。這時問題就來了,萬一別人的環境下,沒有裝Python3怎麼辦呢?在看書的時候發現能夠把Python腳本打包成執行程序,因而就打算搞一個,噩夢啊,10天時間啊!(固然,也是我水平不行)python2.7

首先這腳本是在Windows 7 64bit下寫的,而且也是在這個環境下測試的。這環境下Python3.4.2的安裝很是簡單,官網上應有msi包,直接裝便可,運行也沒有問題,還帶有一個idle的編輯器。編輯器

寫代碼的過程略過不提,可是打包的時候這頓折磨啊。ide

首先是在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,先用spa

dpkg -l  | grep python2orm

找到全部的Python相關包,再用ip

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都比較新,這方面的資源仍是少,就發出來,但願對有些朋友有用。

相關文章
相關標籤/搜索