2009-09-30 117 views
11

我想在OSX下安裝pycairo(Python綁定爲cairo graphics library)。如何在osx上安裝pycairo?

我開始與

easy_install pycairo 

,並得到:

Requested 'cairo >= 1.8.8' but version of cairo is 1.0.4 

error: Setup script exited with Error: cairo >= 1.8.8 not found 

所以我去了開羅的網站並下載開羅的最新的軟件包(1.8.8),也是最新的軟件包的東西稱爲pixman(兩個源代碼包 - 找不到osx二進制文件)

解壓兩個,每個都在自己的目錄中。

In file included from cairo-analysis-surface.c:37: 
cairoint.h:71:20: error: pixman.h: No such file or directory 

我在做什麼錯: 爲pixman,常規./configure ; make ; sudo make install的工作只是找到 開羅,在./configure似乎工作,但要失敗的?

爲什麼我必須努力爭取一個軟件庫才能在「正常工作」的操作系統上工作?達爾文爲什麼不更喜歡linux?

+0

更新:我把所有的.h文件從pixman目錄下載到開羅的。一個醜陋的蠻力的東西,但它似乎工作:'make; sudo make install'似乎工作正常。 儘管如此,我仍然在嘗試安裝pycairo時得到「請求的cairo> = 1.8.8',但cairo的版本是1.0.4」。它認爲我有開羅1.0.4,而忽略了新的。任何想法爲什麼?我如何解決這個問題? – Yoav

回答

6

好的。我解決了它。將解決方案放在這裏供將來參考,它可能有助於某人。

基本上,整個ports/fink系統有點搞砸了,而且osx在linux-y世界裏並沒有很好的表現。

所以,我需要在OSX安裝pycairo的步驟是:

  • 下載pixman,開羅的最新的源代碼版本,pycairo
  • 提取的一切。然後:

    cd PIXMAN_DIR ; ./configure ; make ; sudo make install 
    cd CAIRO_DIR ; cp PIXMAN_DIR/pixman/*.h . ; ./configure ; make ; sudo make install 
    cd PYCAYRO_DIR; locate cairo.pc 
    

    希望有幾個位置被返回。選擇最有可能的一個(與最新的開羅一個)。對我來說,這是 「/opt/local/lib/pkgconfig/cairo.pc」,做:

    export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ 
    

    在此之後,仍在PYCAIRO_DIR,做到:

    python setup.py install 
    

這應該做它...

+1

我認爲你有問題,因爲你將fink和你自己的代碼混合在一起 - 只使用其中之一;)有效地,這些中的每一個都等同於Linix自己的打包系統。 我這樣說的原因是/ opt/local/bin將來自Macports,而不是您自己的代碼,默認情況下它會是/ usr/local/bin – Mark

3

port命令安裝darwinports python安裝的庫,這是不同於框架構建(所以步驟2和3不應該工作)。改爲嘗試sudo easy_install pycairo(儘管您的第4步應該與此相同)。

也看看which python,以檢查你是否在運行你認爲你是的python。

+0

Here(http://stackoverflow.com/questions/1500866/如何安裝-pycairo-on-osx)是另一個有類似問題的人 –

+0

如果你不小心,使用easy_install這樣可能會使蘋果提供的python進入圖片變得更加複雜,它不會幫助解決根本問題。 –

+0

我拿Akusete來表示他想從他的Python2.6.4框架構建中使用pycairo(他的第1步)。如果他得到這個工作,他可以​​拋棄所有MacPorts的Python東西,並在將來避免這個問題。但是,您的全部MacPorts解決方案也不錯。有什麼理由更喜歡它嗎? –

7

看來你在這裏混合了各種安裝選項。 MacPorts軟件包系統port install命令應該自動引入特定軟件包所需的所有依賴關係,所以技巧是從正確的頂層項目開始。對於python軟件包,MacPorts目前有一個通用約定:以py-開頭的軟件包用於python 2.4,py25-用於2。5和py26-爲2.6。目前在MacPorts中有py-cairo,py25-cairopy26-cairo包。

通過選擇py-cairo你選的python2.4的版本,你可能會發現,MacPorts的建造和安裝爲您的python2.4(在/opt/local/bin/python2.4鏈接),如果你啓動它,你可能會發現你可以在那裏進口開羅。現在可能可以滿足您的需求,但是Python 2.4已經很老了,不再支持,所以如果您剛剛開始,最好從Python 2.6開始,它是Python的兩個當前版本之一。要做到這一點,你應該需要做的是:

sudo port install py26-cairo 

這應該帶來任何缺少的依賴關係,主要是MacPorts的python2.6的,你可以從/opt/local/bin/python2.6運行。您可能需要在shell啓動腳本中更改$PATH,可能是.bash_profile,以便在搜索路徑中儘早放置/opt/local/bin

因爲安裝Cairo及其python綁定似乎相當複雜,所以堅持使用完整的MacPorts解決方案應該更容易和更好。這確實意味着你不必要地(無害地)安裝了一些你不需要的Python實例。

sudo port uninstall py-cairo python24 

完全去除python.org Python安裝較爲複雜:但是,如果你想清理了一點東西,你可以很容易地取出的MacPorts python24。我已經解釋了流程here。但是,只要你保持自己的路線平直,就沒有迫切需要去除。

+0

我嘗試了您的建議併成功運行。非常感謝你。我認爲我的主要問題是我一般不瞭解macports和macos的機制和約定。 我已經閱讀macports的介紹和文檔從macports.org,但我從來沒有意識到在標題中使用的版本號(我認爲它以某種方式使用解決的最新版本或什麼) – Akusete

+0

是的,MacPorts的Python命名約定是相當混亂。如果他們已經開始使用py24-而不是py-,那可能就不那麼簡單了。很高興這一切工作! –

+0

如何讓'cairo.HAS_QUARTZ_SURFACE'產生1? – vy32

2

在Mac OS上,您可以安裝多個Python版本。如果您決定通過Fink或MacPorts安裝Python,您可以獲得更多。從源代碼編譯庫時,應確保它們指向正確的安裝。

我目前在我的機器上安裝了Python 2.5.1和Python 2.6.4,我可以分別通過python2.5python調用。他們住在兩個不同的文件夾中: /System/Library/Frameworks/Python.framework/Versions/2.5/Library/Frameworks/Python.framework/Versions/2.6

我從tarball編譯pycairo 1.8.8時遇到了類似的問題。本例中的INSTALL文件是您的朋友,因爲它包含正確的說明以避免潛在的版本衝突。您基本上需要指定正確的前綴,以便將軟件包安裝在正確的文件夾中。

 
$ python -c "import sys; print sys.prefix" 
    # make a note of the python prefix 
$ ./configure --prefix=[python_prefix] 
$ make 
$ make install  # may require superuser access 

運行與python2.5python這些說明,你將能夠獲得兩個版本的正確安裝pycairo(或通過使用MacPorts/Fink安裝任何版本)。

8

我發現this指令非常有幫助,更不用說混淆了。我在約塞米蒂,對我來說效果很好。此說明使用自制軟件進行安裝。所以,如果你已經有自制程序,這兩個命令應該是有幫助的:

$ brew install cairo --use-clang 
$ brew install py2cairo 

對於非自制安裝了Python,該指令建議設置PYTHONPATH找到pycairo。你可以在你的.bashrc/.profile /中設置你的PYTHONPATH。無論如何:

PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH. 

我個人並不需要使用指令的最後部分,但它可能會幫助你。

+0

只包含鏈接的答案是[認爲不好的做法](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)。請總結這裏的內容(不要複製/粘貼),這樣答案就可以獨立運作。如果你不這樣做,那麼你的答案就會被刪除,特別是如果鏈接死亡的話。 –

+0

如果你使用python 3,你可以使用「brew install py3cairo」來代替。 –