將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
緣由分析:
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 便可。