pyinstaller linux系統下打包python源文件

將python程序放在其餘linux服務器中執行,一般linux服務器中默認安裝python2.6,不少狀況下須要升級爲2.7  且要安裝程序中須要的第三方模塊,配置較爲麻煩,因此經過在本地linux環境中打包python程序,而後在其餘linux服務器中直接執行打包後的文件,能夠不依賴於python環境。python

使用pyinstaller 將python源文件打包成二進制文件,而後./二進制文件便可。前提是python源文件在本地linux環境可以執行成功,而後再打包。linux

 

下面是打包過程當中遇到的問題及解決方法:緩存

一、首先 pip install pyinstaller  服務器

 

二、而後 pyinstaller  xxx.py python2.7

報錯:IOError: Python library not found: libpython2.7mu.so.1.0, libpython2.7.so.1.…………ui

解決方法:spa

查找/usr/local/lib 下有沒有對應版本的libpython*.*.so文件,
若是有則跳過這步,若是沒有則須要從新安裝python,在python安裝配置中必定要加上--enable-shared參數,就能夠生成對應動態連接庫ip

(libpython*.*.so這裏生成的位置是在/usr/local/lib下,不少第三方庫默認編譯出來的位置在/usr/local/lib/下,通常這個路徑裏都是用戶本身安裝軟件的共用庫文件,而/usr/lib通常是系統的共用庫文件)編譯器

#./configure --enable-shared 
#make && make install

pip

 

三、而後再次執行 pyinstaller  xxx.py 

繼續報錯:error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

解決方法:

 vi /etc/ld.so.conf   

加入新行/usr/local/lib, 保存後,運行

    /sbin/ldconfig

    /sbin/ldconfig –v

緣由分析:

/etc/ld.so.conf:
這個文件記錄了編譯時使用的動態連接庫的路徑。
默認狀況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫文件
若是你安裝了某些庫,沒有指定 --prefix=/usr 這樣lib庫就裝到了/usr/local下,而又沒有在/etc/ld.so.conf中添加/usr/local/lib,就會報錯了
剛纔#./configure --enable-shared 並無加上參數  --prefix=/usr,因此再次報錯。 

ldconfig是什麼呢 :
它是一個程序,一般它位於/sbin下,是root用戶使用的東東。具體做用及用法能夠man ldconfig查到
簡單的說,它的做用就是將/etc/ld.so.conf列出的路徑下的庫文件 緩存到/etc/ld.so.cache 以供使用
所以當安裝完一些庫文件,(例如剛安裝好glib),或者修改ld.so.conf增長新的庫路徑後,須要運行一下/sbin/ldconfig
使全部的庫文件都被緩存到ld.so.cache中,若是沒作,即便庫文件明明就在/usr/lib下的,也是不會被使用的,結果
編譯過程當中抱錯,缺乏xxx庫。

 

四、再次執行pyinstaller xxx.py 成功

在當前路徑下生成build 和 dist兩個文件夾(build能夠刪除)

其中dist文件夾下,有一個和py程序同名的文件 xxx  

把dist文件夾放到其餘linux服務器上,直接執行./xxx 便可。

相關文章
相關標籤/搜索