lxml簡易安裝方法

來源:互聯網
上載者:User
文章目錄
  • 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命令,可傳任意參數,可返回執行狀態和執行結果。

>>傳送門<<

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.