Cython NameError: имя 'blah' не определено. Магия Cython в Jupyter не работает должным образом?

Я пытаюсь ускорить выполнение некоторого кода в Jupyter с помощью cython, но по какой-то причине он не «запоминает» функции после запуска ячейки %% cython. Это не проблема с любыми другими примерами, которые я нашел в Интернете (например: https://jakevdp.github.io/blog/2017/12/11/live-coding-cython-ising-model/ ). Я использую Cython 0.29.15 и Python 3.7.3.

Пример:

%load_ext cython
%%cython

def function(x):
    y = 2*x
    return y
function(1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-d7befaefa369> in <module>
----> 1 function(1)

NameError: name 'function' is not defined

Я пробовал cpdef и cdef, но они дают тот же вывод об ошибке.

Другой пример :

%%cython 

cpdef int a = 0
for i in range(10):
    a += i

print(a)

Ничего не печатает

Следующая ячейка:

print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-12-bca0e2660b9f> in <module>
----> 1 print(a)

NameError: name 'a' is not defined

person Conner Lester    schedule 17.04.2020    source источник
comment
Включите в свой вопрос минимальный воспроизводимый пример вместо изображений.   -  person Object object    schedule 17.04.2020
comment
пожалуйста, также включите вывод, напечатанный на консоли, которая запустила jupyter.   -  person cel    schedule 17.04.2020
comment
Это работает для меня (и я думаю, что многие другие). Вы можете запустить подробный %%cython --verbose и надеяться увидеть больше. Что-то не так с вашей установкой, но я сомневаюсь, что кто-то сможет помочь удаленно.   -  person ead    schedule 18.04.2020


Ответы (1)


Я заставил его работать.

%load_ext cython
%%cython

def function(x):
    y = 2*x
    return y
function(1)
2

Возможно, были какие-то проблемы с установкой. Я не уверен, я новичок в этом деле, но

вот что я сделал:

.Попытался переустановить cython - не сработало.

.Попытался переустановить anaconda3 - не сработало.

.Обнаружил, что мой терминал использует python2, а затем переключил его на python3 (https://dev.to/irfnhm/how-to-set-python3-as-a-default-python-version-on-mac-4jjf)

.Затем переустановил anaconda3 (https://towardsdatascience.com/how-to-successfully-install-anaconda-on-a-mac-and-actually-get-it-to-work-53ce18025f97)

.Теперь цитон работает!!

Я понятия не имею, почему это сработало (опять же, новичок), но надеюсь, что это поможет кому-то в будущем.

person Conner Lester    schedule 19.04.2020