2013-03-15 69 views
0

我剛通過Homebrew(真棒工具)以及它的依賴(包括gtk +)安裝pygtk;事情是當我嘗試導入GTK的python解釋器時,它會引發一個ImportError,導入pygtk或任何其他模塊時不會發生ImportError,我無法弄清楚什麼是錯的。 :S在OS X上導入gtk與Python的錯誤

+0

你確定你安裝了'pygtk'到你正在運行的同一個Python嗎? – abarnert 2013-03-15 00:48:28

+0

另外,請注意Brew包清楚地說(當你'info','install'等等)「對於非自制Python,你需要像這樣修改你的PYTHONPATH:...」。除非你使用Homebrew Python,你是否這樣做? – abarnert 2013-03-15 00:49:47

回答

1

經過OP的澄清之後,原來的答案並沒有描述他的問題......雖然我認爲它是相關的,並且可能會幫助其他人,所以我會離開它。但首先是相關部分。

在您可以import gtk之前,您需要撥打pygtk.require,如本教程的Getting Started部分所示。 (欲瞭解更多詳情,請參閱PyGTK FAQ。)

這應該可以解決您的問題......但您只是與Fatal Python error: PyThreadState_Get: no current thread一起崩潰。有很多原因可以解決這個問題,但在這種情況下最可能的情況是您正在運行鍼對不同版本的Python爲一個版本的Python構建的C擴展(pygtk/gtk/whatever)。 (這實際上也是covered in the PyGTK FAQ,但在這種情況下,這是CPython C擴展模塊的一個更普遍的問題,並不是PyGTK特有的。)

如果你有多個Python 2.7版本(如果你有2.7.3,非常肯定有兩個,因爲蘋果的是2.7.2),你必須弄清楚你擁有哪一個,以及哪一個你用來構建pygtk,並確保你使用它來自同一個。

然後我們回到原來的答案,我已經在下面留下了。


有兩個原因可以讓你有這個問題。


首先,如果您還沒有安裝,除了與OS X附帶的那些額外的Python版本,你可能沒有閱讀說明書是brew可打印出有關pygtk只要你安裝它,或者它的信息,等:

例如:

$ brew info pygtk 
pygtk: stable 2.24.0 
... 
==> Caveats 
For non-Homebrew Python, you need to amend your PYTHONPATH like so: 
    export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH 

家釀安裝Python包到/usr/local/lib/pythonX.Y-even如果它安裝蘋果的Python安裝。但是默認情況下,Apple的Python安裝不會在那裏查找軟件包。所以,你需要這樣做。

只要在終端上輸入這一行,該終端會話的其餘部分將工作。如果你想讓它永久......好吧,有很多選擇,具體取決於你想要的東西。有關詳細信息,請參見this answer

這在Gems, Eggs and Perl ModulesHomebrew and Python更詳細地解釋。 (這是爲什麼Homebrew通常建議儘可能使用pip而不是在brew中尋找軟件包的多種原因之一,但也有一些例外,我很容易相信pygtk就是其中之一。)


第二,如果你安裝了自制的Python中,你可能沒有你的PATH樹立正確的,所以你在安裝包到家釀Python的網站包,但隨後運行蘋果Python安裝代替。

如果您只是輸入python並且不知道您正在運行哪一個,which python應該告訴您。如果它是/usr/bin/python它是Apple的;如果是/usr/local/bin/python,那就是Homebrew的。

您還可以從Python啓動橫幅中知道,因爲Mountain Lion自帶2.7.2,而Homebrew將安裝2.7.3。 (另外,IIRC,蘋果公司使用了一個預發佈鐺來構建他們的Python,而用Homebrew構建的任何東西都將使用您擁有的任何clang/gcc/llvm-gcc構建,而這不會是預發行版本...)

注意:僅僅因爲您在橫幅中的某處看到「Apple」這個詞並不意味着它就是Apple的Python!如果您構建自制Python,或者安裝python.org Python,它幾乎肯定會使用Apple GCC,Apple Clang或Apple LLVM-GCC構建。它也在Apple OS上運行。因此,「蘋果」或「蘋果」會在任何 Python,蘋果或不是蘋果的橫幅中出現三次。

解決方法是運行您想要運行的Python。例如:

  • 使用virtualenv來創建基於一個或兩個安裝一個或多個虛擬環境,並從中挑選使用VENV工具。
  • 始終使用完整路徑 - 例如,輸入/usr/local/bin/python來運行Homebrew的Python,/usr/bin/python來運行Apple's。 (並修改任何腳本中的shebang行來做同樣的事情。)
  • 更改您的PATH變量以確保首先選擇您想要的任何一個。對於Homebrew,您需要在/ usr/bin之前安裝/usr/local/Cellar/python/2.7.3/bin(僅用於Python)或/ usr/local/bin(用於所有內容);對於蘋果,反過來說。
  • 將Python框架bin目錄添加到PATH中,以便您可以與常規二進制文件分開操作它們的順序。 (這個和Homebrew Python沒什麼關係,因爲Cellar目錄服務的目的相同,但是它可以用於其他第三方Python安裝。)

所有這些都適用於其他工具。很多人陷入了困境,具有例如,一個安裝的pipidle放在第一位的路徑,而不同的安裝的python呢......


如果你已經安裝了不同的Python,例如,通過使用來自python.org的安裝程序,你可以很容易地有上述問題。例如,您可以爲python.org Python安裝東西,但運行Apple Python,並且最重要的是,也不能將其配置爲查看Homebrew站點包目錄。

+0

感謝您的回答;我正準備回覆您的意見,我在.profile文件中添加了export PYTHONPATH =/usr/local/lib/python2.7/site-packages:$ PYTHONPATH'行,所以我認爲這不是路徑問題否則它不會在解釋器中導入pygtk)。 – Alfageme 2013-03-15 01:16:21

+0

行動中,我不小心打進了;我想說我正在運行Apple Build;但版本是2.7.3(正如它出現在橫幅中)這可能是問題? 我在'import gtk'這行'pygtk.require(「2.0」)''''然後導入gtk;那樣的解釋器導致我這個錯誤:'致命的Python錯誤:PyThreadState_Get:沒有當前線程'任何想法? – Alfageme 2013-03-15 01:22:03

+0

首先,如果你運行的是2.7.3,你不會運行蘋果的版本。 Apple不分發2.7.3。 (當然,你正在運行一個由蘋果公司構建的gcc/llvm-gcc/clang構建的Python,並且在蘋果公司的操作系統上運行,所以你仍然可以在旗幟中看到他們的名字一次或兩次,但這就是爲什麼我給瞭如果你不知道你正在運行哪個Python,那麼第一步就是找到它。 – abarnert 2013-03-15 01:29:36