2012-10-22 8 views
61

Uwaga: używam virtualenvwrapper.Dlaczego nie mogę pobrać `pip install lxml` do pracy w virtualenv?

Przed uruchomieniem wirtualnego środowiska:

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

Po uruchomieniu wirtualnego środowiska:

(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

Jakoś nie rozumiem, w jaki sposób jest to konkretne pytanie programistyczne. IMHO, należy do http: //www.serverfault.com –

+4

@MarkusWMahlberg Virtualenv jest niezwykle popularnym narzędziem Pythona, używanym głównie przez programistów podczas programowania, a nie przez sysadmins podczas wdrażania. lxml jest bardzo popularny, a tego typu problemy nie są rzadkością. Uważam, że jest to temat na podstawie kryteriów "narzędzi programowych powszechnie używanych przez programistów". –

+0

@JeremyBanks Jestem świadomy virtualenv. Ale myślę, że mamy problem raczej związany ze środowiskiem, a szanse na uzyskanie użytecznej odpowiedzi powinny być znacznie wyższe w przypadku awarii serwera. –

Odpowiedz

110

Prawdopodobnie już lxml zainstalowany w systemie, być może ze względu na zainstalowany pakiet systemu. Tak więc pierwsza próba (pip install lxml bez aktywnego virtualenv) nie kończy się niepowodzeniem, ale również jej nie instaluje; to naprawdę nic nie robi.

W virtualenv domyślnie pakiety systemowe są ignorowane. Dlatego pip myśli, że lxml nie jest zainstalowany. Dlatego próbuje zainstalować go w środowisku wirtualnym.

lxml zawiera moduły C, które należy skompilować w celu prawidłowej instalacji. Jednak kompilacja tych modułów C polega na tym, że masz już zainstalowane "biblioteki programistyczne". Te biblioteki programistyczne są bibliotekami C, a nie Python i jako takie nie będą w stanie automatycznie pobrać ich z Internetu i zainstalować dla nich.

W związku z tym konieczne będzie samodzielne zainstalowanie tych bibliotek programistycznych, najprawdopodobniej za pomocą menedżera pakietów. W systemie Debian (jak Ubuntu), to jest ...

apt-get install libxml2-dev libxslt-dev 

To spowoduje zainstalowanie biblioteki libxml2 i rozwoju libxslt do lokalnego systemu. Jeśli spróbujesz ponownie zainstalować lxml, krok kompilacji modułu C powinien zadziałać, ponieważ teraz te biblioteki programistyczne są w twoim systemie.

Otrzymany komunikat o błędzie spowodowany był brakiem tych bibliotek (część komunikatu o błędzie).

Zobacz także: How to install lxml on Ubuntu

+1

'Pomyślnie zainstalowany lxml' Dziękujemy! Ciekaw jestem, czy znasz miejsce, które mapuje niezbędne nagłówki do różnych (popularnych) pakietów Pythona. Miałem też problemy z innymi. Czy program apt-get python-dev pobiera tylko nagłówki dla biblioteki standardowej? –

+3

Najlepszy zakład: wyszukaj google dla pliku nagłówkowego, którego brakuje, mam nadzieję, że ktoś inny ma ten sam problem. Tak, tak, python-dev pobiera tylko nagłówki dla standardowej biblioteki. libxml2-dev nie ma nic wspólnego z pythonem: libxml2 jest biblioteką C, z której po prostu używasz biblioteki Pythona do pracy. Dlatego nie został zainstalowany podczas instalacji Pythona-Dev. W przeciwnym razie musisz zainstalować każdą bibliotekę C istniejącą na świecie, aby upewnić się, że masz wszystkie nagłówki, których potrzebujesz, aby każda biblioteka Pythona (taka jak lxml) działała bez dodatkowych kroków. –

+0

Zaraz na pieniądze, dzięki los! – EvertW

18

dla CentOS użytkowników: przy wsiadaniu:

error: command 'gcc' failed with exit status 1

DO:

sudo yum install libxslt-devel libxml2-devel 
5

Jeśli masz lxml zainstalowany na poziomie systemu, a chcesz przenieść go do postaci virtualenv, którego nie utworzyłeś przy użyciu --system-site-packages, możesz dowiązać symbolicznie do folderu virtualenv '.

poza virtualenv, w powłoce Pythona:

import lxml 
print lxml.__file__ 

W moim przypadku, to znaleźć w /usr/lib/python2.7/dist-packages. Będzie tam folder lxml i plik informacji o jajku. Gdziekolwiek znajduje się twój virtualenv, przejdź do jego folderu /lib/python-x.y/dist-packages (może być konieczne utworzenie dist-packages) i dowiązanie symboliczne do folderu biblioteki i komórki jajowej.

Powiązane problemy