2012-10-22 7 views
61

Hinweis: Ich verwende virtualenvwrapper.Warum kann ich `pip install lxml` nicht in einem virtualenv verwenden?

Bevor die virtuelle Umgebung zu aktivieren:

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

Nach der virtuellen Umgebung zu aktivieren:

(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

Ich irgendwie nicht zu sehen, auf welche Weise das ist eine bestimmte Programmierfrage. IMHO gehört das zu http: //www.serverfault.com –

+4

@MarkusWMahlberg Virtualenv ist ein extrem verbreitetes Python-Dienstprogramm, das hauptsächlich von Programmierern während der Entwicklung und nicht von Systemadministratoren während der Bereitstellung verwendet wird. Lxml ist sehr beliebt, und diese Art von Problem ist nicht selten. Ich denke, dass dies unter den Kriterien von "Software-Tools, die häufig von Programmierern verwendet werden", Thema ist. –

+0

@ JeremyBanks Ich bin mir virtuellenv bekannt. Aber ich denke, wir haben ein eher umweltbezogenes Problem und die Chancen, eine brauchbare Antwort zu bekommen, sollten bei Serverfault sehr viel höher sein. –

Antwort

110

Sie wahrscheinlich bereits lxml auf Ihrem System installiert haben, vielleicht installiert wegen eines Systempaket. So scheitert der erste Versuch (pip install lxml ohne aktiven virtualenv) nicht, aber es installiert es auch nicht; es macht wirklich nichts.

In einem virtualenv werden die Systempakete standardmäßig ignoriert. Daher denkt pip, dass lxml nicht installiert ist. Daher versucht es, es in Ihrer virtuellen Umgebung zu installieren.

lxml enthält C-Module, die kompiliert werden müssen, um ordnungsgemäß installiert zu werden. Die Kompilierung dieser C-Module beruht jedoch darauf, dass einige "Entwicklungsbibliotheken" bereits installiert sind. Diese Entwicklungsbibliotheken sind C-Bibliotheken, nicht Python, und als solche kann pip sie nicht automatisch aus dem Internet holen und für Sie installieren.

Daher müssen Sie diese Entwicklungsbibliotheken selbst installieren, höchstwahrscheinlich mit Ihrem Paketmanager. In einem Debian-System (wie Ubuntu), ist dies ...

apt-get install libxml2-dev libxslt-dev 

Dies wird die libxml2 und libxslt Entwicklungsbibliotheken auf Ihrem lokalen System installieren. Wenn Sie erneut versuchen, lxml zu installieren, sollte der C-Modul-Kompilierungsschritt funktionieren, da sich diese Entwicklungsbibliotheken jetzt auf Ihrem System befinden.

Die Fehlermeldung, die Sie erhalten haben, war aufgrund der Tatsache, dass diese Bibliotheken fehlten (der libxml/xmlversion.h: No such file or directory Teil der Fehlermeldung).

Siehe auch: How to install lxml on Ubuntu

+1

'Erfolgreich installiert lxml' Danke! Ich bin neugierig, wenn Sie von einem Ort wissen, der die notwendigen Überschriften zu verschiedenen (populären) Python-Paketen abbildet. Ich hatte auch Probleme mit anderen. Erhält apt-get python-dev nur Header für die Standardbibliothek? –

+3

Beste Wette: Suche Google nach der Header-Datei, die fehlt, hoffe, jemand anderes hat das gleiche Problem. Ja, python-dev erhält nur Header für die Standardbibliothek. libxml2-dev hat nichts mit python zu tun: libxml2 ist eine C-Bibliothek, mit der man gerade eine Python-Bibliothek benutzt. Aus diesem Grund wurde es bei der Installation von Python-dev nicht installiert. Andernfalls müssten Sie im Grunde jede C-Bibliothek in der Welt installieren, um sicherzustellen, dass Sie alle Header, die Sie benötigen, um jede Python-Bibliothek (z. B. Lxml) ohne zusätzliche Schritte machen würde machen. –

+0

Richtig auf das Geld, danke a Menge! – EvertW

18

für CentOS Benutzer: wenn immer:

error: command 'gcc' failed with exit status 1

DO:

sudo yum install libxslt-devel libxml2-devel 
5

Wenn Sie lxml auf Systemebene installiert haben, und wollen um es in eine virtualenv zu migrieren, die Sie nicht miterstellt haben, können Sie es in Ihre virtualenv 's dist-packages Ordner symbolisieren.

Außerhalb Ihrer virtualenv, in einem Python-Shell:

import lxml 
print lxml.__file__ 

In meinem Fall ist es in /usr/lib/python2.7/dist-packages gefunden. Es wird einen lxml-Ordner und eine Ei-Info-Datei geben. Wo auch immer sich Ihr virtualenv befindet, gehen Sie in den Ordner /lib/python-x.y/dist-packages (Sie müssen möglicherweise dist-packages erstellen) und symbolisieren Sie sowohl den Bibliotheksordner als auch das Ei darin.

Verwandte Themen