文章目錄
- 1.linux系統安裝多個不同版本軟體的問題
- 2.軟體的編譯安裝
- 3.一個有用的python函數
進公司快一個月了,到現在還在學習工具,周末還得來加班解決工具的安裝問題,先鄙視自己……
遇到問題
安裝公司的一個架構的時候一個python庫lxml一直安裝失敗,得到錯誤:
Traceback (most recent call last):
File "setup.py", line 115, in <module>
STATIC_CFLAGS, STATIC_BINARIES),
File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 65, in ext_modules
lib_versions = get_library_versions()
File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 247, in get_library_versions
xml2_version = run_command(find_xml2_config(), "--version")
File "/home/work/safe/tool/lxml-2.2.2/setupinfo.py", line 236, in run_command
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/home/work/safe/tool/python/lib/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/home/work/safe/tool/python/lib/python2.6/subprocess.py", line 1092, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我這個python初學者一直追到subprocess.Popen函數,返現是它引發了exception。單獨測試這個函數,發現要啟動並執行命令必須加上完整的路徑。可安裝時傳進去的參數的確是完整的路徑啊!
而且換一台機器立馬就裝成功了……實在不想再糾結這個問題了,問題解決才是王道,於是找到了繞過這個函數的放法
解決方案
1.安裝lxml前必須安裝好libxml和libxslt(架構已內建編譯好的,我就沒有動手編譯)
2.根據libxml和libxslt的路徑修改setup.py中的數組如下,例如
STATIC_INCLUDE_DIRS = ["/home/work/safe/tool/libxslt/include","/home/work/safe/tool/libxml2/include"]<br />STATIC_LIBRARY_DIRS = ["/home/work/safe/tool/libxml2/lib","/home/work/safe/tool/libxslt.lib"]<br />STATIC_CFLAGS = []<br />STATIC_BINARIES = []
3.編譯的時候帶上--static參數即可
python setup.py build_ext --static<br />python setup.py build --static<br />python setup.py install --static
思考1.linux系統安裝多個不同版本軟體的問題
以python為例,公司機器上的python為2.3版本,但現在要用python2.6,而我們一般都沒有root許可權,只能將python安裝到個人目錄下。這時候在shell裡輸入python,啟動並執行還是python2.3。怎麼辦呢?
其實linux安裝軟體也就是可執行檔+環境變數。只要能夠在path裡找到你的可執行檔,就算是安裝成功了,沒有windows還需要註冊表之類的那麼麻煩。因此,只要調整不同版本軟體在環境變數PATH中的先後順序即可!你想用哪個版本的,就把哪個版本的放在PATH的前面就可以了。
2.軟體的編譯安裝
以前對linux下編譯安裝軟體的認識就停留在"configure"、“make”、“make install”的層面上。這次解決問題的過程中,閱讀了一點安裝檔案的代碼,發現有些軟體有著複雜的庫依賴,如果所需要的庫沒有在預設路徑裡,就需要你通過參數的形式指定。
3.一個有用的python函數
就是上面出問題那個函數,它的作用是調用shell命令,可傳任意參數,可返回執行狀態和執行結果。
>>傳送門<<