ImportError: No module named miClase - Linux

ImportError: No module named miClase - Linux

Notapor diego_g_09 » Mié Oct 12, 2011 3:40 am

Buenas, estoy teniendo un problema al ejecutar mi aplicación en linux. Cuando la ejecuto en Windows no tengo problemas me funciona perfectamente, pero cuando la ejecuto en linux me da el siguiente error..
ImportError: No module named miClase

Realmente no se que puede ser, repito en windows funciona y cuando le ejecuto el comando python main.py me da el error que les mencione. No se que es lo que no funciona.

La estructura del proyecto es la siguiente

src
------ packageUNO
---------------- miClase.py (dentro de packageUNO)

main.py (ubicado en src)

Otro dato es que pude ejecutar un ejemplo que baje de esta pagina (el ejemplo platforms) y anduvo perfecto!! tanto en windows como en linux, pero con mi proyecto no se cual es el problema, he visto el codigo una y otra vez para ver si encuentro algo distinto cuando hace los import, pero la verdad que no encontre diferencias, realmente no se que puede ser!!

Saludos!!
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: ImportError: No module named miClase - Linux

Notapor kiketom » Mié Oct 12, 2011 7:47 am

Dentro de la carpeta packageUNO, crea un archivo __init__.py y dentro escribes...

__all__ = ["miClase"]
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España

Re: ImportError: No module named miClase - Linux

Notapor diego_g_09 » Mié Oct 12, 2011 11:50 pm

Hola probe con lo que me dijiste y no funciono, Te comento con mas detalle que me esta pasando:
El error que sale por consola es el siguiente:
ImportError: No module named miClase.

Esto pasa cuando realizo un import de una de mis clases que se encuentra en mi package (nombre "Motor"), en alguna de mis clases que están dentro del package que tengo (se entiende?), paso a detallar un poco mas:

El main que se encuentra en la raiz (src), tiene el siguiente código:

# ------------- INICIO IMPORT ------------- #
from Motor.VentanaPrincipal import VentanaPrincipal
import logging
# -------------- FIN IMPORT --------------- #


if __name__ == '__main__':

logging.basicConfig(filename='logMotor.log',level= logging.DEBUG)
logging.info('Se inicia el archivo EjecutarAplicacion Correctamente')

venPrin = VentanaPrincipal ()
logging.info('Se Crea la ventana principal Correctamente')

Hasta aquí todo bien!, el import lo hace correcto y sigue ejecutando el main (comprobado por el archivo log), luego cuando se crea venPrin se llama a la clase VentanaPrincipal que se encuentra en el package "Motor", y el código de la clase ventanaPrincipal es el siguiente:

# ------------- INICIO IMPORT ------------- #
import pygame
from pygame.locals import *
from Motor.XML import XML
# -------------- FIN IMPORT --------------- #

Pongo solo el import porque comprobe mediante un log que se cae cuando realiza el import from Motor.XML import XML, además del obvio msj que me aparece en consola que todo indica que es cuando realiza el import de la clase XML. (aclaro que tengo otras clases ademas de XML y alterne el orden para ver si el problema era una clase en especifico, pero no, ya que cuando explota cuando llama a cualquiera de mis clases)

Me esta dando el error de ImportError: No module named XML, o sea no puede importar la clase XML que se encuentra en el mismo package que VentanaPrincipal.

La estructura de mi proyecto es la siguiente:
-- src
-----main.py (ubicado en src)
---------- Motor (package)
----------------------- XML.py (dentro de Motor)
----------------------- VentanaPrincipal.py (dentro de Motor)

Lo que pude ver es que no tengo problema cuando realizo un import desde fuera del package, como te comente la clase main hace un import de VentanaPrincipal (from Motor.VentanaPrincipal import VentanaPrincipal) y no hay problema, es mas sigue ejecutando el código, pero el problema aparece cuando dentro del package hago un impor de una clase que también esta en el package (from Motor.XML import XML), acá explota.!! Por ahí viene el problema pero no me doy cuenta bien porque pasa esto?, ya que en Windows funciona sin problemas pero en linux no.

Otra cosa que probe y no funciono fue realizar el impor sin especificar el package (ya que estoy dentro de el) o sea asi from XML import XML
Tampoco funciono!!, realmente no se que pasa! debe ser algo simple porq no funciona en linux (fedora - Sugar) y si en windows. Hay que configurar algo en linux? algun path¿, etc para que reconozca el package mio?

Espero haberme explicado mejor, gracias por la ayuda!! :)
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: ImportError: No module named miClase - Linux

Notapor diego_g_09 » Jue Oct 13, 2011 1:53 am

Bueno por fin pude arreglar el error!!! gracias por la ayuda!!

El problema se arreglo cuando le cambie el nombre a mi clase, de XML.py a datosXml.py esta clase paso a estar en orden alfabético arriba de todas en mi package. Luego cuando probé en linux mágicamente funciono!!
No puedo encontrar una explicación lógica a como se soluciono, pero pude notar los siguientes cambios,

01- el nombre de mi clase no estaba mas con todas Mayúsculas o sea de XML a datosXml, no creo que importe pero fue uno de los cambios.
02 - El orden en el package cambio, de estar ultima a estar primera, esto es lo que mas pinta le veo a que halla hecho un efecto, ya que creo q el problema podía residir en que quería importar un modulo que no estaba creado antes por un tema de orden o algo? ya que antes estaba al final del package y ahora al principio.

Bueno realmente no se técnicamente por que funciono pero por las dudas les comente lo que cambie para que funcione y los cambios que vi reflejados.

Saludos y gracias por la ayuda!! :)
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm

Re: ImportError: No module named miClase - Linux

Notapor diego_g_09 » Vie Oct 14, 2011 4:18 pm

Bueno hice unas pruebas para determinar bien cual había sido el problema. Me da error cuanto tengo una clase con letras en Mayúsculas, por ejemplo XML, FPS, etc, cuando la clase se compone en su totalidad por letras en Mayúscula, linux fedora (sugar) da el error ImportError: No module named NOMBRECLASE, por lo tanto las solución solo es cambiar el nombre y evitar que esten todas las letras en Mayúscula, por eje Xml, Fps.
El error no da en linux ubuntu, ni en Windos, solo en linux fedora (sugar)

Saludos
Diego
diego_g_09
 
Mensajes: 21
Registrado: Sab Ago 07, 2010 11:58 pm


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado