2012-10-22 70 views
61

注意:我正在使用virtualenvwrapper。爲什麼我不能使用`pip install lxml`在virtualenv中工作?

之前激活虛擬環境:

$ pip install lxml 
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages 
Cleaning up... 

激活虛擬環境後:

(test-env)$ pip install lxml 
force/build/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: 
libxml/xmlversion.h: No such file or directory 

compilation terminated. 

error: command 'gcc' failed with exit status 1 

---------------------------------------- 
Command /home/chaz/dev/envs/test-with-system-python-force/bin/python2 
.7 -c "import setuptools;__file__='/home/chaz/dev/envs/test-with- 
system-python-force/build/lxml/setup.py';exec(compile(open(__file__). 
read().replace('\r\n', '\n'), __file__, 'exec'))" install --record 
/tmp/pip-bJ6Q_B-record/install-record.txt --single-version-externally 
-managed --install-headers /home/chaz/dev/envs/test-env/include/site/python2.7 failed with error code 1 in 
/home/chaz/dev/envs/test-env/build/lxml 
Storing complete log in /home/chaz/.pip/pip.log 
+1

我以某種方式未能看出這是一個特定的編程問題。恕我直言,這屬於http://www.serverfault。com –

+4

@MarkusWMahlberg Virtualenv是一個非常常見的Python實用程序,主要由程序員在開發過程中使用,而不是在部署過程中由系統管理員使用。 lxml非常流行,這種類型的問題並不罕見。我認爲這是根據「程序員常用的軟件工具」的標準進行的主題。 –

+0

@JeremyBanks我很清楚virtualenv。但我認爲我們有一個相當環境相關的問題,並且在serverfault上獲得有用答案的機會應該更高。 –

回答

110

你可能已經在你的系統,也許是安裝在已安裝LXML由於系統包。因此,第一次嘗試(沒有活動virtualenv的pip install lxml)不會失敗,但它也不會安裝它;它確實沒有做任何事情。

在virtualenv中,默認情況下系統包將被忽略。因此,pip認爲lxml沒有安裝。因此,它會嘗試將其安裝到您的虛擬環境中。

lxml包含需要編譯才能正確安裝的C模塊。但是,這些C模塊的編譯依賴於您已經安裝了一些「開發庫」。這些開發庫是C庫,而不是Python,因此pip將無法自動從互聯網獲取併爲您安裝。

因此,您將需要自行安裝這些開發庫,很可能使用您的軟件包管理器。在Debian的系統(如Ubuntu),這是...

apt-get install libxml2-dev libxslt-dev 

這將安裝libxml2和發展的libxslt庫到本地系統。如果您再次嘗試安裝lxml,則C模塊編譯步驟應該可行,因爲這些開發庫現在位於您的系統上。

您收到的錯誤消息是由於這些庫缺失(錯誤消息的libxml/xmlversion.h: No such file or directory部分)。

參見:How to install lxml on Ubuntu

+1

'成功安裝lxml'謝謝!我很好奇,如果你知道一個地方將必要的標題映射到各種(流行的)Python包。我也有其他問題。另外,apt-get python-dev只能獲得標準庫的頭文件嗎? –

+3

最好的選擇:搜索谷歌頭文件丟失,希望其他人有同樣的問題。另外,是的,python-dev只會爲標準庫獲取標題。 libxml2-dev與python無關:libxml2是一個C庫,你恰好在使用python庫來處理。這就是爲什麼當你安裝python-dev時沒有安裝它。否則,您基本上需要安裝世界上現有的每個C庫,以確保您擁有所有需要使所有Python庫(如lxml)工作的頭文件,而無需額外的步驟。 –

+0

正確的金錢,謝謝很多! – EvertW

18

爲CentOS用戶: 得到時:

error: command 'gcc' failed with exit status 1

DO:

sudo yum install libxslt-devel libxml2-devel 
5

如果您已經安裝在系統級lxml,並希望將其遷移到您未使用0123創建的,你可以將它鏈接到你的virtualenvdist-packages文件夾中。

外面的virtualenv,在Python外殼:

import lxml 
print lxml.__file__ 

在我而言,這是一個在/usr/lib/python2.7/dist-packages找到。將會有一個lxml文件夾和egg-info文件。無論你的virtualenv在哪裏,進入它的/lib/python-x.y/dist-packages文件夾(您可能需要創建dist-packages),並將庫文件夾和蛋符號鏈接到它。

相關問題