2012-01-06 3 views
7

Sto cercando di installare Fabric in Virtualenv ma sto ricevendo un errore. Sto usando Python 2.7.2+È possibile installare Fabric (Python) in Virtualenv? Ottenere un errore

src/MD2.c:31:20: fatal error: Python.h: No such file or directory 

compilation terminated. 

error: command 'gcc' failed with exit status 1 

---------------------------------------- 
Command /home/andre/python_virtualenv/bin/python -c "import setuptools;__file__='/home/andre/python_virtualenv/build/pycrypto/setup.py'; exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-YGuAIj-record/install-record.txt --install-headers /home/andre/python_virtualenv/include/site/python2.7 failed with error code 1 
Storing complete log in /home/andre/.pip/pip.log 

Alcuni indizi su cosa c'è che non va qui?

migliori saluti,

risposta

15

Se si utilizza Debian al gusto di Linux, è necessario installare il pacchetto python2.X-dev

sudo apt-get install python2.7-dev

Questo perché alcune librerie di Python sono solo vincolanti per Le librerie C che devono essere compilate prima dell'uso, richiedono intestazioni per farlo.

Fabric utilizza Paramiko per connettersi tramite SSH, che include tali associazioni.

Le intestazioni sono spesso in pacchetti chiamati packagename-dev (debian) o packagename-develop (redhat). Qui vediamo l'header python.h mancante per python 2.7, quindi installiamo python2.7-dev. Dovrai farlo solo una volta per tutti i tuoi envs wirtual dal momento che è installato a livello di sistema.

Lo stesso problema si verifica se si usano librerie che si riferiscono ad altri prodotti C come mysql libs, che richiedono intestazioni mysql.

+1

@ e-satis grazie mille per questa fantastica aggiunta! – vorushin

+1

Hai risposto prima di me, quindi non c'era modo di fare un duplicato :-) –

1

È necessario lasciare che gcc conosce Python del percorso di inclusione e il percorso lib.

Per prima cosa è necessario trovare il percorso lib di Python include & lib.

Ad esempio:

/home/me/soft/include 

e

/home/me/soft/lib 

Poi, esportare i seguenti var in bash

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/me/soft/include 

E

export LD_LIBRARY_PATH=$C_INCLUDE_PATH:/home/me/soft/lib 

Questo non è l'unico modo, ma dovrebbe funzionare per voi.