2012-03-27 14 views
10

Estoy tratando de importar un módulo cython data.pyx a otro módulo cython user.pyx. Todo compila bien, pero cuando intento llamar a user.pyx en un módulo de python, obtengo el error 'ImportError: ningún módulo llamado data'.Cython: ImportError: Ningún módulo llamado 'myModule': cómo llamar a un módulo cython que contiene un cimport a otro nódulo cython?

Todo está en el mismo directorio.

package/ 
    __init__.py #empty 
    setup.py  
    data.pxd 
    data.pyx 
    user.pyx 

Mi setup.py

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 


ext_modules = [ 
    Extension("data", ["data.pyx"]), 
    Extension("user", ["user.pyx"],include_dirs = ['myPackageDir']) 
    ] 

setup(
    name = 'app', 
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = ext_modules 
) 

la ejecución regular de voluntad test.py elevó el error.

import user  #this line raised the 'ImportError: No module named data' below 
user.doSomething() 

La excepción que se ve es

Traceback: 
File "test.py", line 1, in <module> 
    import package.user 
    File "user.pyx", line 1, in init user (user.c:3384) 
ImportError: No module named data 

¿Cómo puedo hacer el trabajo de importación? Gracias por cualquier ayuda.

+0

¿Por qué editó su código en el código de trabajo cuando en realidad debería mostrar el código incorrecto? –

+0

@Niklas Veo tu punto. Con mi edición, la publicación se vuelve confusa. Rob post resuelve el error 'ImportError: no module named user'. Pero mi problema real fue el error 'ImportError no module named _data_', que resolví recompilando todo mi proyecto. Como la publicación de Rob resuelve un problema potencial real, lo marqué como respuesta, incluso si no era mi problema real. Perdón por la confusion. Si hay una mejor manera, por favor dígame. –

Respuesta

1

puede ser que falte algo de Cython, pero yo creo que es:

import package.user 
user.doSomething() 
+0

Mi error, en mi código escribí 'package.user' como sugieres. Pero olvidé escribirlo al escribir mi pregunta. He corregido mi pregunta. –

+0

Reconstruí todos los archivos de mi proyecto y solucionó el problema. Gracias por tu ayuda. –

+0

Sin duda, es bienvenido, pero parece que solucionó el problema usted mismo. Me alegra que esté funcionando! – rob

8

me encuentro con este problema de nuevo en un otro proyecto. Para resolverlo, esto es lo que hice:

  • todo import y cimport declaración debe ser completo
  • todo el código Python debe estar contenida en un rootFolder
  • la setup.py debe estar al mismo nivel que la rootFolder
  • todas las carpetas en el rooFolder incluyendo la necesidad rootFolder contiene una __init__.py
  • de su setup.py de la extensión include_dirs el mosto contiene '.'

he creado un proyecto simple que ilustra este here.
Este page me ayudó a crearlo.
Pero mi proyecto es más simple y creo que me hubiera ayudado mucho si lo hubiera tenido.
Mi proyecto también ilustra cómo crear automáticamente todos los archivos cython en un proyecto.

Cuestiones relacionadas