Ошибка 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
6 ответов
Это будет отлично работать, если ваш PYTHONPATH настроен правильно и глобально (только что проверил сам).
- Должен быть указан каталог, содержащий "akismet.py", а не путь к файлу! Убедитесь, что вы не используете относительные пути.
- Обратите внимание, что вам может потребоваться перезагрузка / выход из системы, чтобы применить изменения переменных среды ко всем программам.
Я просто хочу привлечь больше внимания к собственному ответу Доппельгангера на его вопрос. У меня была эта ошибка, и ситуация такова:
Вы пытаетесь импортировать функцию / класс 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, но если вы передумаете на полпути, как я, вы можете почесать голову.
Проверьте, действительно ли ваш PYTHONPATH соответствует ожидаемому, например, с помощью интерактивной консоли:
In [1]: import sys
In [2]: print sys.path
akismet.py действительно находится в одной из этих папок?
В вашем пути должен быть каталог, содержащий каталог "akismet". Я полагаю, вы добавили сам каталог 'akismet' в $PYTHONPATH.
Когда вы пишете:
from akismet import Akismet
Python пытается открыть файл akismet/Akismet.py
где-то на своем пути поиска.
Все это при условии Akismet
это файл и akismet
это каталог. Если есть akismet.py
файл, то каталог, содержащий этот файл, должен быть указан в $PYTHONPATH
,
Просто:
- Убедитесь, что у вас установлен akismet (общесистемный или virtualenv)
- Проверить, вставив (импортировать akismet) в оболочку Python
- CD в корневой каталог вашего проекта и запустить (найти. -Name akismet.py)
- Если вы найдете файл с таким именем, посмотрите, сможете ли вы его переименовать.
- Затем запустите (найдите. -Name akismet.pyc -print0 | xargs -0 rm -rf)
Теперь запустите ваше приложение, и вы должны быть в порядке.
Я всегда забываю, что ipython импортирует модули при использовании run
команда внутри интерпретатора ipython. Он не будет повторно импортировать любые модули, которые вы изменили, поэтому новые переменные или функции не будут найдены. Это известная проблема с ipython.
Вывод: избегайте использования run
так как он не перезагрузит ваши модули.