Установка c-расширений Python с помощью buildout

Проект, над которым я работаю, требует avro, для которого требуется python-snappy, для которого требуется snappy. У меня возникли проблемы с тем, чтобы придумать правильное заклинание для наращивания, чтобы заставить все работать вместе.

Следующий buildout.cfg собирается успешно, но он устанавливает avro в develop-eggs, и все остальное (например, в разделе [test]), которое пытается сослаться на него, пытается собрать его снова и терпит неудачу.

buildout.cfg

[buildout]
eggs-directory = eggs
extensions =
    buildout.dumppickedversions
eggs =
    avro
    httplib2
    pyramid
parts =
    avro
    test
    mongodb

[snappy]
# Dependency for avro
recipe = zc.recipe.cmmi
url = http://snappy.googlecode.com/files/snappy-1.0.5.tar.gz

[avro]
recipe = zc.recipe.egg:custom
egg = avro
include-dirs = ${snappy:location}/include
library-dirs = ${snappy:location}/lib

[test]
recipe = pbp.recipe.noserunner
script = runtests
eggs =
    ${buildout:eggs}
    pbp.recipe.noserunner
    WebTest

[mongodb]
recipe = rod.recipe.mongodb
base-url = http://downloads.mongodb.org
version = 2.0.4
darwin-32bit-url = ${mongodb:base-url}/osx/mongodb-osx-i386-${mongodb:version}.tgz
darwin-64bit-url = ${mongodb:base-url}/osx/mongodb-osx-x86_64-${mongodb:version}.tgz
linux2-32bit-url = ${mongodb:base-url}/linux/mongodb-linux-i686-${mongodb:version}.tgz
linux2-64bit-url = ${mongodb:base-url}/linux/mongodb-linux-x86_64-${mongodb:version}.tgz
logpath=${buildout:parts-directory}/mongodb/log
dbpath=${buildout:parts-directory}/mongodb/data
master=true
update=true

Вывод

Uninstalling avro.
Updating snappy.
Installing avro.
zip_safe flag not set; analyzing archive contents...
Installing test.
Getting distribution for 'python-snappy'.
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
snappymodule.cc:28:20: error: Python.h: No such file or directory
snappymodule.cc:31:22: error: snappy-c.h: No such file or directory
snappymodule.cc:36: error: ISO C++ forbids declaration of ‘PyObject’ with no type
snappymodule.cc:36: error: expected ‘;’ before ‘*’ token
snappymodule.cc:54: error: expected initializer before ‘*’ token
snappymodule.cc:59: error: expected initializer before ‘*’ token
snappymodule.cc:43: warning: ‘_state’ defined but not used
error: Setup script exited with error: command 'gcc' failed with exit status 1
An error occurred when trying to install python-snappy 0.4. Look above this message for any errors that were output by easy_install.
While:
  Installing test.
  Getting distribution for 'python-snappy'.
Error: Couldn't install: python-snappy 0.4

Есть ли простой подход к обработке зависимостей расширения с помощью buildout? Что я должен делать здесь?


person kojiro    schedule 04.04.2012    source источник


Ответы (1)


Эта ошибка обычно указывает на отсутствие библиотек разработки и может быть устранена примерно так:

$ aptitude установить python-devel

Другими словами, это не похоже на сборку.

person aclark    schedule 04.04.2012
comment
В системе Mac OSX после установки Xcode проверьте меню «Настройки...», затем установите флажок рядом с «Инструменты командной строки». Это должно привести к установке /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/Python.h и друзей. - person MarkHu; 25.02.2013