2012-03-27 3 views
10

Ich versuche, ein Cython-Modul data.pyx in ein anderes Cython-Modul user.pyx zu importieren. Alles kompilieren, aber wenn ich versuche, user.pyx in einem Python-Modul aufzurufen, bekomme ich den Fehler 'ImportError: Kein Modul namens Daten'.Cython: ImportError: Kein Modul mit dem Namen 'myModule': Wie wird ein Cython-Modul mit einem Cimport zu einem anderen Cython-Knoten aufgerufen?

Alles ist im selben Verzeichnis.

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

Mein 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 
) 

die folgende test.py Willen Laufen erhöht den Fehler.

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

Die Ausnahme, die ich bekommen ist

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 

Wie kann ich den Import Arbeit machen? Danke für jede Hilfe.

+0

Warum haben Sie Ihren Code für den Arbeitscode bearbeitet, wenn er eigentlich den falschen Code zeigen sollte? –

+0

@ Niklas Ich sehe deinen Standpunkt. Mit meiner Bearbeitung wird der Beitrag verwirrend. Rob post löst den Fehler 'ImportError: kein Modul namens user'. Aber mein eigentliches Problem war der Fehler 'ImportError kein Modul namens _data_', das ich durch Neukompilieren meines gesamten Projekts löste. Da Rob Post ein echtes potenzielles Problem löst, habe ich es als Antwort markiert, auch wenn es nicht mein tatsächliches Problem war. Sorry, für die Verwirrung. Wenn es einen besseren Weg gibt, sag es mir bitte. –

Antwort

1

ich etwas über Cython fehlen könnte, aber ich denke, es ist:

import package.user 
user.doSomething() 
+0

Mein Fehler, in meinem Code schrieb ich 'package.user', wie Sie vorschlagen. Aber ich habe vergessen, es beim Schreiben meiner Frage einzugeben. Ich habe meine Frage korrigiert. –

+0

Ich habe jede Datei in meinem Projekt neu erstellt und es hat das Problem behoben. Danke für Ihre Hilfe. –

+0

Sie sind sicherlich willkommen, aber es klingt wie Sie das Problem selbst behoben haben. Froh, dass es funktioniert! – rob

8

begegne ich dieses Problem wieder in einem anderen Projekt. Um es zu lösen, hier ist das, was ich getan habe:

  • alle import und cimport Aussage muss vollständig qualifiziert sein
  • alle Python-Code muss in einem rootFolder
  • der setup.py muss auf dem gleichen Niveau sein enthalten sein als die rootFolder
  • alle Ordner in der rooFolder einschließlich der rootFolder Most enthält eine __init__.py
  • in Ihrem setup.py die Erweiterung des include_dirs Most enthält '.'

ich ein einfaches Projekt erstellt, die diese here zeigt.
Diese page hat mir geholfen, es zu erstellen.
Aber mein Projekt ist einfacher und ich denke, es hätte mir sehr geholfen, wenn ich es hätte.
Mein Projekt zeigt auch, wie automatisch alle Cython-Dateien in einem Projekt erstellt werden.

Verwandte Themen