cannot import name expm2

Текст ошибки вставьте текстом в вопрос в тег code

По всей видимости setup.py этого пакета делался наскоро, поэтому в зависимостях не указана точная версия scipy, при которой пакет будет работоспособен. Хотя как я погляжу на гитхабе последние изменения были два года назад и его никто не поддерживает.
Тем временем в scipy функция exmp2 выпилена, отсюда и ошибка.

The deprecated functions expm2 and expm3 have been removed from scipy.linalg. The deprecated keyword q was removed from scipy.linalg.expm. And the deprecated submodule linalg.calc_lwork was removed.

Самое простое решение — поставить scipy поменьше версией, например, так:

importerror cannot import name is_string (7)

У меня есть четыре разных файла с именем: main, vector, entity и физика. Я не буду публиковать весь код, просто импорт, потому что я думаю, что это ошибка. (Если вы хотите, я могу разместить больше)

Затем я запускаю с main.py, и я получаю следующую ошибку:

Я очень новичок в Python, но работал с C ++ в течение длительного времени. Я предполагаю, что ошибка связана с импортом объекта дважды, один раз в основной, а затем в физику, но я не знаю обходного пути. Может ли кто-нибудь помочь?

Answer #1

Хотя вам обязательно нужно избегать циклических зависимостей, вы можете отложить импорт в python.

это (по крайней мере в некоторых случаях) обойдет ошибку.

Answer #2

Не называйте свой текущий скрипт python именем другого импортируемого модуля.

Решение: переименуйте свой рабочий скрипт python

  1. вы работаете в medicaltorch.py
  2. в этом скрипте у вас есть: from medicaltorch import datasets as mt_datasets medicaltorch from medicaltorch import datasets as mt_datasets где medicaltorch должен быть установленным модулем

Это приведет к ImportError с ImportError . Просто переименуйте свой рабочий скрипт python в 1.

Answer #3

Это круговая зависимость. Его можно решить без каких-либо структурных изменений кода. Проблема возникает из-за того, что в vector вы требуете, чтобы entity был сразу доступен для использования, и наоборот. Причина этой проблемы заключается в том, что вы запрашиваете доступ к содержимому модуля до его готовности — используя from x import y . Это по существу то же самое, что и

Python способен обнаруживать циклические зависимости и предотвращать бесконечный цикл импорта. По сути, все, что происходит, это то, что для модуля создается пустой заполнитель (т. Е. Он не имеет содержимого). После компиляции циклически зависимых модулей он обновляет импортированный модуль. Это работает примерно так.

Чтобы python мог работать с циклическими зависимостями, вы должны использовать только стиль import x .

Поскольку вы больше не ссылаетесь на содержимое модуля на верхнем уровне, python может скомпилировать модуль, фактически не имея доступа к содержимому циклической зависимости. Под верхним уровнем я подразумеваю строки, которые будут выполняться во время компиляции, а не в содержании функций (например, y = xy ). Статические переменные или переменные класса, обращающиеся к содержимому модуля, также могут вызывать проблемы.

Answer #4

Я тоже получил эту ошибку по другой причине .

В главном скрипте были завершены строки Windows. my_sub_module имел окончание строки UNIX. Изменение их, чтобы они были одинаковыми, устранили проблему. Они также должны иметь одинаковую кодировку символов.

Answer #5

Чтобы сделать логику понятной, очень важно. Эта проблема возникает, потому что эта ссылка становится мертвой петлей.

Если вы не хотите изменять логику, вы можете поместить некоторый оператор import, который вызвал импорт ImportError в другую позицию файла, например, конец.

Вы получите Import Error: ImportError: cannot import name ‘a1’

Но если мы изменим позицию от test.b import b2 в A, как показано ниже:

И мы можем получить то, что хотим:

Answer #6

Python чувствителен к регистру, поэтому entity ! = Entity . Я предлагаю вам изменить корпус entity в вашем импорте как Entity . Это устранит вашу проблему.

Comments

Copy link Quote reply

fabiovix commented Nov 10, 2017 •

Hi ! When I try to use the pybrain on python2, I got the error:

«ImportError: cannot import name expm2»

They say that it’s because the the deprecated functions «expm2» and «expm3» have been removed from scipy.linalg.

I’m using SciPy version 1.0.0, and I can’t install a more old version of scipy.

There’re any plans for now to fix this in pybrain to work with the current version of scipy ??

Оцените статью