it-roy-ru.com

Ошибка Python: ImportError: невозможно импортировать имя Akismet

Я видел много подобных ошибок, но я не вижу решения, которое применимо к моей конкретной проблеме.

Я пытаюсь использовать модуль Akismet , который находится на моем PYTHONPATH, затем, если я запускаю интерактивный интерпретатор, когда я запускаю from akismet import Akismet (как говорит строка документации), я получаю следующую ошибку:

from akismet import Akismet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
12
Doppelganger

Он будет отлично работать, если ваш PYTHONPATH настроен правильно и глобально (только что проверил сам).

  • Необходимо указать каталог, содержащий «akismet.py», а не путь к файлу! Убедитесь, что вы не используете относительные пути.
  • Обратите внимание, что вам может потребоваться перезагрузка/выход из системы, чтобы применить изменения переменных среды ко всем программам.
6
AndiDog

Я просто хочу обратить больше внимания на собственный ответ Доппельгангера на его вопрос. У меня была эта ошибка, и ситуация такова:

Вы пытаетесь импортировать функцию/класс X из модуля, который называется скажем «Strategy.py».

К сожалению, вы также создали каталог пакета python под названием стратегии, другими словами, у вас есть каталог под названием «стратегия», по крайней мере с одним файлом в каталоге «стратегия» с именем «____init___.py».

root folder\
    strategy.py (contains function/class called X)
    strategy\
        __init__.py

Затем вы забудете о том, что создали каталог пакета python, и попытаетесь импортировать некоторый класс или функцию, определенную в файле strategy.py, в корневой каталог, например, так

from strategy import X

Затем вы получите ошибку Python error: ImportError: cannot import name X.

Фактическая проблема, как отмечает Doppelganger, заключается в том, что интерпретатор python отдает приоритет созданной вами директории пакета, ищет FILE/MODULE с именем X в каталоге пакета и игнорирует фактический модуль strategy.py и функцию/класс X в том, что вы на самом деле ищете.

Это именно то, что вы ожидаете и хотите, если вы читаете документацию по пакетам Python, но если вы передумаете на полпути, как я, вы можете почесать голову.

15
david.barkhuizen

Проверьте, действительно ли ваш PYTHONPATH соответствует ожидаемому, например, сделав это в интерактивной консоли:

In [1]: import sys

In [2]: print sys.path

akismet.py действительно находится в одной из этих папок?

4
Benjamin Wohlwend

В вашем пути должен быть каталог, содержащий каталог «akismet». Полагаю, вы добавили сам каталог akismet в $ PYTHONPATH. 

Когда вы пишете:

from akismet import Akismet

Python пытается открыть файл akismet/Akismet.py где-нибудь в своем пути поиска.

Все это при условии, что Akismet является файлом, а akismet является каталогом. Если существует файл akismet.py, то каталог, содержащий этот файл, должен быть указан в $PYTHONPATH.

2
Jacek Konieczny

Просто:

  1. Убедитесь, что у вас установлен akismet (общесистемный или virtualenv)
  2. Подтвердите, вставив (импортируйте akismet) в оболочку Python
  3. CD в ​​корневой каталог вашего проекта и запустить ( найти. -Name akismet.py )
  4. Если вы найдете файл с таким именем, посмотрите, сможете ли вы его переименовать.
  5. Затем запустите ( найти. -Name akismet.pyc -print0 | xargs -0 rm -rf )

Теперь запустите ваше приложение, и вы должны быть в порядке.

1
un33k

Я всегда забываю, что ipython импортирует модули, когда вы используете команду run внутри интерпретатора ipython. Он не будет повторно импортировать любые модули, которые вы изменили, поэтому новые переменные или функции не будут найдены. Это известная проблема с ipython.

Вывод: избегайте использования run, так как он не перезагрузит ваши модули.

0
david_adler