2012-01-06 17 views
7

Tôi đang cố gắng cài đặt Fabric trong Virtualenv nhưng tôi gặp lỗi. Tôi là usinh Python 2.7.2+Có thể cài đặt Fabric (Python) trong Virtualenv? Gặp lỗi

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 

Một số manh mối về những gì sai ở đây?

Trân trọng,

Trả lời

15

Nếu bạn sử dụng Debian hương Linux, bạn cần phải cài đặt gói python2.x-dev

sudo apt-get install python2.7-dev

Điều này là do một số libs python chỉ là ràng buộc để C libs cần được biên dịch trước khi sử dụng, yêu cầu tiêu đề để làm như vậy.

Sử dụng vải Paramiko để kết nối qua SSH, bao gồm các ràng buộc như vậy.

Tiêu đề thường nằm trong các gói được gọi là packagename-dev (debian) hoặc packagename-develop (redhat). Ở đây chúng ta thấy tiêu đề python.h bị thiếu cho python 2.7, vì vậy chúng ta cài đặt python2.7-dev. Bạn sẽ phải làm điều đó chỉ một lần cho tất cả các envs ảo của bạn kể từ khi nó được cài đặt ở cấp hệ thống.

Vấn đề tương tự xuất hiện nếu bạn sử dụng lib có liên quan đến sản phẩm C khác, chẳng hạn như mysql libs, sẽ yêu cầu tiêu đề mysql.

+1

@ e-satis cảm ơn bạn rất nhiều vì sự bổ sung tuyệt vời này! – vorushin

+1

Bạn đã trả lời nó ngay trước khi tôi đã làm, vì vậy không có sử dụng để thực hiện một bản sao :-) –

1

Bạn cần cho gcc biết đường dẫn bao gồm và đường dẫn lib của Python.

Trước tiên, bạn cần phải tìm Python của bạn bao gồm & đường dẫn lib.

Ví dụ:

/home/me/soft/include 

/home/me/soft/lib 

Sau đó, xuất khẩu var sau trong bash

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

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

Đây không phải là cách duy nhất, nhưng nên làm việc cho bạn.