2010-02-28 14 views
12

He visto muchos errores similares, pero no veo una solución que se aplique a mi problema en particular.Error de Python: ImportError: no se puede importar el nombre Akismet

Estoy intentando utilizar el Akismet module que está en mi PYTHONPATH, a continuación, si comienzo el intérprete interactivo, cuando corro from akismet import Akismet (como dice la cadena de documentación), me sale el siguiente error:

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

Respuesta

6

Funcionará perfectamente si su PYTHONPATH está configurada de forma correcta y global (solo lo probé).

  • Debe establecerse en el directorio que contiene "akismet.py", no en la ruta del archivo. Asegúrate de no usar rutas relativas.
  • Tenga en cuenta que es posible que tenga que reiniciar/cerrar sesión para aplicar cambios de variables de entorno a todos los programas.
+0

digamos que he/ruta/en mi PYTHONPATH, entonces tratado con /path/akismet/akismet.py (__init__.py adición), y trató con /path/akismet.py Ni trabajado – Doppelganger

+0

@Doppelganger: Coloque el script "akismet.py" en "/ path /" y agregue esa ruta a su PYTHONPATH. Asegúrese de utilizar dos puntos como separador si tiene varios directorios en PYTHONPATH. Reinicie y use el comando 'set' para verificar si PYTHONPATH es correcta. Entonces definitivamente debe funcionar. – AndiDog

+1

Bien, el verdadero problema aquí era que había marcado la carpeta akismet como un paquete que agregaba dentro de _init_.py, borré esa carpeta y funciona bien ahora. – Doppelganger

2

Debe tener el directorio que contiene el directorio 'akismet' en su camino. Supongo que ha agregado el directorio 'akismet' en sí a $ PYTHONPATH.

Cuando se escribe:

from akismet import Akismet 

Python intenta abrir el archivo akismet/Akismet.py en algún lugar de su ruta de búsqueda.

Todo esto asumiendo Akismet es un archivo y akismet es un directorio. Si hay un archivo akismet.py, el directorio que contiene este archivo debe aparecer en $PYTHONPATH.

+0

digamos que tengo/ruta/en mi PYTHONPATH, luego probé con /path/akismet/akismet.py (agregando __init__.py), y probé con /path/akismet.py Tampoco trabajé – Doppelganger

4

Comprueba si tu PYTHONPATH es realmente lo que esperas que sea, p. al hacer esto en una consola interactiva:

In [1]: import sys 

In [2]: print sys.path 

¿realmente akismet.py está en una de esas carpetas?

15

Solo quiero llamar más la atención sobre la propia respuesta de Doppelganger a su pregunta. Tuve este error, y la situación es la siguiente:

Está tratando de importar la función/clase X desde un módulo llamado say 'strategy.py'.

Desafortunadamente, también ha creado un directorio de paquetes python llamado estrategia, en otras palabras, tiene un directorio llamado 'estrategia', con al menos un único archivo en el directorio 'estrategia' llamado '____init___.py'.

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

A continuación, olvidar el hecho de que ha creado el directorio del paquete pitón, y tratar de importar una clase o función definida en el archivo de strategy.py en el directorio 'raíz', al igual que

from strategy import X

Lo que obtiene es el error Python error: ImportError: cannot import name X.

El problema real, como señala Doppelganger, es que el intérprete de Python da prioridad al directorio de paquetes que ha creado y busca un ARCHIVO/MÓDULO llamado X en el directorio del paquete e ignora el módulo real strategy.py, y la función/clase X allí que realmente está buscando.

Esto es exactamente lo que esperarías y querrías si lees la documentación en paquetes de Python, pero si cambias de opinión a la mitad como yo lo hice, podrías terminar rascándote la cabeza.

+1

También verifico si persiste * archivos .pyc como python importará estos incluso con los archivos * .py desaparecidos. ¡pyc son la ruina de mi existencia! – Rebs

1

simple:

  1. Asegúrese Akismet ha instalado (para todo el sistema o virtualenv)
  2. Verificar por pegar (Akismet importación) en una cáscara de pitón
  3. CD en el directorio raíz de su proyecto y ejecutar (hallazgo. -Nombre akismet.py)
  4. Si encuentra un archivo con ese nombre, ver si se puede cambiar el nombre
  5. a continuación, ejecute (encontrar. -name akismet.pyc -print0 | xargs -0 rm-rf)

Ahora ejecutar la aplicación y usted debe ser bueno para ir.

0

Siempre olvido que ipython importa los módulos cuando se utiliza el comando run dentro del intérprete de ipython. No volverá a importar los módulos que modifiques, por lo que no se encontrarán nuevas variables o funciones. Este es un known issue con ipython.

Conclusión: Evite utilizar run ya que no volverá a cargar sus módulos.

Cuestiones relacionadas