Ошибка Python: ImportError: невозможно импортировать имя Akismet - PullRequest
12 голосов
/ 28 февраля 2010

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

Я пытаюсь использовать модуль 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

Ответы [ 6 ]

15 голосов
/ 18 сентября 2011

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

Вы пытаетесь импортировать функцию / класс X из модуля с именем say '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.

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

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

6 голосов
/ 28 февраля 2010

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

  • Должен быть указан каталог, содержащий "akismet.py", а не путь к файлу! Убедитесь, что вы не используете относительные пути.
  • Обратите внимание, что вам может потребоваться перезагрузка / выход из системы, чтобы применить изменения переменных среды ко всем программам.
4 голосов
/ 28 февраля 2010

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

In [1]: import sys

In [2]: print sys.path

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

2 голосов
/ 28 февраля 2010

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

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

from akismet import Akismet

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

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

1 голос
/ 14 января 2013

Simple:

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

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

0 голосов
/ 15 апреля 2013

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

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

...