2012-09-18 12 views
8

Mac OS X 10.8.1 ve Python 2.7.2'de lxml yapıyorum ve sorun yaşıyorum. (Github deposunu klonladım ve Mac OS X için talimatları izledim: http://lxml.de/build.html)Mac OS X 10.8.1 üzerinde lxml kurarken neyi yanlış yapıyorum?

Libxml2 yapılandırmasında bir sorun var gibi görünüyor; aşağıdaki terminal çıkış kuyruk ucu olan:

configure: creating ./config.status 
config.status: creating libxml2.spec 
config.status: creating Makefile 
config.status: creating include/Makefile 
config.status: creating include/libxml/Makefile 
config.status: creating doc/Makefile 
config.status: creating doc/examples/Makefile 
config.status: creating doc/devhelp/Makefile 
config.status: creating example/Makefile 
config.status: creating python/Makefile 
config.status: creating python/tests/Makefile 
config.status: creating xstc/Makefile 
config.status: creating include/libxml/xmlversion.h 
config.status: creating xml2-config 
config.status: creating libxml-2.0.pc 
config.status: creating libxml-2.0-uninstalled.pc 
config.status: creating python/setup.py 
config.status: creating config.h 
config.status: executing depfiles commands 
config.status: executing libtool commands 
rm: libtoolT: No such file or directory 
Done configuring 
make all-recursive 
Making all in include 
Making all in libxml 
make[3]: Nothing to be done for `all'. 
make[3]: Nothing to be done for `all-am'. 
Making all in . 
    CC  error.lo 

[snipped]

CC  hash.lo 
parser.c: In function 'xmlParseInNodeContext': 
parser.c:13492: warning: pointer targets in passing argument 1 of 'xmlFindCharEncodingHandler' differ in signedness 
    CC  list.lo 

[snipped]

CC  xpointer.lo 
xpath.c: In function 'xmlXPathRegisterFuncNS': 
xpath.c:4870: warning: ISO C forbids passing argument 4 of 'xmlHashAddEntry2' between function pointer and 'void *' 
xpath.c: In function 'xmlXPathFunctionLookupNS': 
xpath.c:4951: warning: ISO C forbids assignment between function pointer and 'void *' 
xpath.c: In function 'xmlXPathCompOpEval': 
xpath.c:13535: warning: ISO C forbids assignment between function pointer and 'void *' 
xpath.c:13562: warning: ISO C forbids assignment between function pointer and 'void *' 
xpath.c: At top level: 
trionan.c:221: warning: 'trio_is_negative' defined but not used 
    CC  xinclude.lo 

I'[snipped]

CC  xmlstring.lo 
threads.c: In function 'xmlCleanupThreads': 
threads.c:918: error: expected expression before '{' token 
make[2]: *** [threads.lo] Error 1 
make[2]: *** Waiting for unfinished jobs.... 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 
Traceback (most recent call last): 
    File "setup.py", line 225, in <module> 
    **setup_extra_options() 
    File "setup.py", line 139, in setup_extra_options 
    STATIC_CFLAGS, STATIC_BINARIES) 
    File "/Users/jedc/Downloads/lxml/setupinfo.py", line 57, in ext_modules 
    multicore=OPTION_MULTICORE) 
    File "/Users/jedc/Downloads/lxml/buildlibxml.py", line 338, in build_libxml2xslt 
    cmmi(libxml2_configure_cmd, libxml2_dir, multicore, **call_setup) 
    File "/Users/jedc/Downloads/lxml/buildlibxml.py", line 266, in cmmi 
    cwd=build_dir, **call_setup) 
    File "/Users/jedc/Downloads/lxml/buildlibxml.py", line 249, in call_subprocess 
    raise Exception('Command "%s" returned code %s' % (cmd_desc, returncode)) 
Exception: Command "make -j5" returned code 512 

m anlamaya çalışırken derinliğimin dışında WAY Burada neyin var? Bu sorunu düzeltmek için ne yapmam gerektiğini bana yönlendiren var mı?

cevap

17

Bu, libxml2'de bir hata 2.9.

Aldığınız hata bu satırda: sadece linux üzerinde çalışmaya olur yasadışı kod, var

once_control = PTHREAD_ONCE_INIT; 

. PTHREAD_ONCE_INIT sadece başlatma için değil, atama için kullanılabilir ve bunun için belirli bir nedeni vardır: platformlar, bir toplayıcı başlatıcısı olarak PTHREAD_ONCE_INIT tanımlayabilir. Hangi OS X yapar. 10.8.1 en /usr/include/pthread.h Gönderen: bu bir kaç gün önce libxml2 posta listesine bildirilmiştir gibi

#define PTHREAD_ONCE_INIT {_PTHREAD_ONCE_SIG_init, {0}} 

görünüyor (https://mail.gnome.org/archives/xml/2012-September/msg00036. html), iki gün sonra bugzilla'da dosyalandı (https://bugzilla.gnome.org/show_bug.cgi?id=684024) ve ertesi gün düzeltildi (http://git.gnome.org/browse/libxml2/commit /? id = 3f6cfbd1d38d0634a2ddcb9a0a13e1b5a2195a5e), bu nedenle muhtemelen 2.9.1'in bu problemi olmayacaktır. Eğer çıkıp 2.9.1 için beklemek Tabii

:

Yani, burada seçenekleri bulunmaktadır.

Alternatif, derleme sayfasının söylediklerine rağmen, Mountain Lion, 2.7.8 ile birlikte gelen libxml2 sürümü "korkunç derecede eski" değil - kullanmasını önerdiği 2.7.3 sürümünden daha yeni. Yani, --static-deps'u atlayabilir ve yerleşik 2.7.8'i kullanabilirsiniz.

2,7,8'den daha yeni bir şey istiyorsanız, ancak (çalışmayan) 2.9.0 kadar yeni bir şey istiyorsanız, yapı sayfası açıkça belirtmeyi gösterir ve http://www.xmlsoft.org sürüm geçmişinin bir yere sahip olması gerekir. İstediğiniz sürümü seçebilirsiniz. O yapı kullanma LXML anlatmak sonra elle http://git.gnome.org/browse/libxml2/commit/?id=3f6cfbd1d38d0634a2ddcb9a0a13e1b5a2195a5e gelen yama uygulamak ve manuel olarak inşa veya ağacın yerine sürümü 2.9.0 üst çekin, yani inşa ve olabilir

python setup.py build --static-deps \ 
    --libxml2-version=2.8.0 

Veya: Örneğin.

Gelecekte, hata ayıklama yapılarıyla uğraşmak istemiyorsanız, yalnızca Python paketlerini yüklemek için pip kullanmanız ve eksik olan bağımlılıkları yüklemek için Homebrew'ı öneririm.Her zaman en son versiyonun ideal yapısını elde edemeyebilirsiniz, ancak çok daha kolay ve genellikle yeterince iyi olacaktır.

+0

Vay, inanılmaz kapsamlı cevap için çok teşekkürler! İlk başta pip kullanmayı denedim ama işe yaramadı; Sadece şimdi denedim ve başarıyla tamamlandı. (Terminal çıktısı sonunda = "başarıyla yüklendi lxml") Ama python'a gidip "import lxml" yazdığımda "ImportError: lxml adlı bir modül yok" alıyorum. Neyi yanlış yaptığım hakkında bir fikrin var mı? –

+1

Apple Python yüklemeniz yok mu? Eşleşmeyen pip ve python sürümlerini çalıştırmanız mümkündür. Oldukça yaygın olan bir şey, yolunuzdaki ilk pip olarak/usr/local/bin/pip (veya/opt/local/bin/pip, vb.) Ile sonuçlanır ve/usr/local/için modüller kurar. bin/python, ama sonra ilk python olarak/usr/bin/python. – abarnert

+0

Bunu bir noktada halletmeyi başardım. Bunu nasıl teşhis edebilirim? (UNIX komutları/yolları/protokolleri üzerinde gerçek bir acemiyim!) –