Чем IPython отличается от Python? - PullRequest
2 голосов
/ 25 июня 2011

В эти дни я пробовал PyMC и написал очень простой mcmceasy.py. Интересно, что скрипт работает нормально в 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

Мой вопрос состоит из 2 частей: 1. Как решить эту проблему с помощью оболочки vanilla python? 2. Что делает IPython свободным от этой ошибки?

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Конечно, у меня нет вашего скрипта, но я успешно выполнил соответствующий импорт из Windows, Linux и OSX версий 2.6 и 2.7 python как в IPython, так и в python.Нет сообщений об ошибках.

ОДНАКО, глядя на «scipy / misc / init .py» имя общего не импортируется.

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

Тот факт, что код работает, означает, что общее импортируется где-то еще.В scipy.__init__.py PackageLoader импортируется из numpy и выполняет страшную магию, проверяя пути фрейма в стеке вызовов и т. Д.

IPython отличается от импорта из python, особенно если вы используете флаг pylab.Это сделало бы ipython и python разными.Я бы посоветовал попробовать импорт выше отдельно.Вызов импорта до того, как PyMC сделает это, может быть обходным путем

В противном случае вы должны опубликовать свою версию numpy, из которой вызывается PackageLoader.

0 голосов
/ 25 июня 2011

Я никогда не использовал pymc, но сначала проверьте, что ipython и ваш системный python используют одну и ту же среду. Но я подозреваю, что pymc просто использует функции scipy, которые используют специфические возможности параллельных вычислений ipython, поэтому в этом случае часть n.1 будет очень сложной.

...