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.
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
@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
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