2011-06-25 49 views
2

我這幾天一直在嘗試PyMC,並且寫了一個非常簡單的mcmceasy.py。有趣的是,腳本運行在IPython中確定,但是,當我直接使用Python,它提供了以下回溯:IPython與Python有什麼不同?

Traceback (most recent call last): 
    File "mcmceasy.py", line 2, in <module> 
    from pymc import MvNormal, MCMC 
    File "/usr/lib/python2.7/site-packages/pymc/__init__.py", line 55, in <module> 
    import ScipyDistributions 
    File "/usr/lib/python2.7/site-packages/pymc/ScipyDistributions.py", line 1, in <module> 
    import scipy.stats.distributions as sc_dst 
    File "/usr/lib/python2.7/site-packages/scipy/stats/__init__.py", line 12, in <module> 
    import mstats 
    File "/usr/lib/python2.7/site-packages/scipy/stats/mstats.py", line 3, in <module> 
    from mstats_basic import * 
    File "/usr/lib/python2.7/site-packages/scipy/stats/mstats_basic.py", line 52, in <module> 
    import scipy.misc as misc 
    File "/usr/lib/python2.7/site-packages/scipy/misc/__init__.py", line 20, in <module> 
    __all__ += common.__all__ 
NameError: name 'common' is not defined 

我的問題有兩個部分:1。如何解決這個問題的香草python的殼呢? 2.什麼使得IPython免於這個錯誤?

回答

2

當然,我沒有你的腳本,但我已經成功地從IPYthon和Python中的Windows,Linux和OSX版本的2.6和2.7 python運行導入問題。您報告時沒有錯誤。

但是,看着「scipy/misc/init .py」,不會導入名稱common。

from common import * 
#...more stuff 
__all__ += common.__all__ 

代碼工作的事實意味着common被導入別的地方。在scipy.__init__.py內,PackageLoader是從numpy導入並執行可怕的魔術,檢查調用堆棧中的幀的路徑等。

IPython從python有不同的導入,尤其是如果您使用的是pylab標誌。這將使ipython和python不同。我建議分別嘗試上面的輸入。在PyMC之前調用導入可能是一種解決方法

否則,您應該發佈numpy的版本,這是從中調用PackageLoader的地方。

0

我從來沒有使用pymc,但首先檢查ipython和您的系統python是否使用相同的環境。但是我懷疑pymc只是使用scipy特性來利用特定的ipython並行計算特性,所以如果是這樣的話,n.1部分將會非常困難。

+0

如何檢查他們是否使用相同的環境?我從來沒有用IPython或Python做過任何特殊的配置。 –

+0

開始可能會比較'sys.path' –

相關問題