2012-03-23 14 views
1

Ich versuche, Cython zu verwenden und versuche, mein erstes Programm zu kompilieren. Ich habe eine hello.pyx mit dem folgenden Code erstellt:Fehler beim Kompilieren des ersten Cython-Programms

def show(): 
    print ("Hello World") 

und einem setup.py mit dem Folowing Code:

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

ext_modules = [Extension("hello", ["hello.pyx"])] 

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

beide in einem Ordner, die ich "cython Programme" genannt, was ist C: \ Python32 \ Cython-Programme. Cython befindet sich unter C: \ Python32 \ Lib \ site-packages \ Cython. Allerdings, wenn ich setup.py laufen bekomme ich folgende Fehlermeldung:

Traceback (most recent call last): 
    File "C:\Python32\cython programs\setup.py", line 10, in <module> 
    ext_modules = ext_modules 
    File "C:\Python32\lib\distutils\core.py", line 136, in setup 
    raise SystemExit(gen_usage(dist.script_name) + "\nerror: %s" % msg) 
SystemExit: usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] 
    or: setup.py --help [cmd1 cmd2 ...] 
    or: setup.py --help-commands 
    or: setup.py cmd --help 

error: no commands supplied 

Ich vermute, dass ich etwas sehr einfach fehle aber ich kann nicht scheinen, um herauszufinden, was es ist. Jede Hilfe wäre willkommen.

+0

Ich nehme an, Sie haben setup.py keine Argumente an der Befehlszeile geben? –

+1

Gemäß der Cython-Dokumentation müssen Sie das Argument 'build_ext' verwenden. Wenn dies Ihr Problem ist, sollten Sie wahrscheinlich die Antwort von @Henry Gomersall akzeptieren. –

Antwort

4

Führen Sie python setup.py build_ext. Das ist für mich in Ordnung.

+0

Danke, ich denke, dass ich meine setup.py erfolgreich ausgeführt habe, aber es gab immer noch ein Problem. Zuerst, als ich setup.py build_ext ausgeführt habe, habe ich folgende Fehlermeldung erhalten: error: C: \ Dokumente und Einstellungen \ student \ hello.pyx: Keine solche Datei oder Verzeichnis. Danach habe ich eine Kopie von hello.pyx zum Schüler gemacht und es erneut ausgeführt. Dann habe ich build_ext ausgeführt; cythoning hello.pyx zu hello.c; Gebäude 'Hallo' Erweiterung; Fehler: Kann vcvarsall.bat nicht finden; Ich denke, dass ich meinen C Compiler irgendwie verbinden muss und ich MinGw heruntergeladen habe, aber ich bin nicht sicher, was ich ändern muss – enderx1x

+0

Sie müssen mingw Ihrem Pfad hinzufügen. Ich mache eigentlich alle meine Windows-Python-Entwicklung mit MSYS: http://www.mingw.org/wiki/MSYS, die eine ergänzende Shell für Mingw und andere nützliche Unix-Tools ist. Es macht das Windows-Erlebnis erträglich! Sie * müssen * einige Python-Pfade in Ihrer Windows-Pfadvariablen hinzufügen (ich vergesse). Stellen Sie sicher, dass Sie Ihre Shell-Schriftart von der bösen Standardeinstellung ändern. Einmal eingerichtet, ist es großartig für die Verwendung von easy_install und so weiter, sowie für die eigentliche Ausführung der Python-App. –

+0

Ich habe MSYS nicht versucht, aber ich habe mingw meinem Pfad hinzugefügt. Nach der erneuten Ausführung habe ich den folgenden Fehler: C: \ MinGW \ bin \ gcc.exe -mno-cygwin -mdll -O-Wall -IC: \ Python32 \ include -IC: \ Python32 \ PC -c hello.c -o build \ temp.win32-3.2 \ Release \ Hallo.o; cc1.exe: Fehler: nicht erkannte Befehlszeilenoption '-mno-cygwin'; Fehler: Befehl 'gcc' fehlgeschlagen mit Exit-Status 1 ;. Es gibt auch einen Weg, so dass ich keine Kopie von hello.pyx im Schüler machen muss. – enderx1x

0

Ich nehme eine wilde Vermutung hier ... aber ich denke, es ist der Platz in Ihrem Verzeichnisnamen. Ich habe gerade ein paar Minuten damit zugebracht, Cython & Distutils zu googeln, weil ich mich an einen der Empfehlungen erinnere, keinen Platz in Verzeichnisnamen zu verwenden, wenn ich sie unter Windows verwende - aber ich konnte den gesuchten Link nicht finden.

Probieren Sie einen schnellen Test aus und benennen Sie Ihre 'Cython-Programme' in 'Cython-Programme' um und sehen Sie, was passiert.

+0

Hmmm, ich würde denken, dass es egal sein sollte, da der Pfad in Anführungszeichen eingeschlossen ist ... Ich denke, er hat dem Skript einfach keine Argumente gegeben. –

+0

Ich dachte das gleiche zuerst, aber es Sie nur 'Python setup.py' ohne Argumente ausführen, erhalten Sie die Standard-Distutils Hilfe .... aber Sie erhalten keine Ausnahme ... und er eine Rückverfolgung geschrieben – user590028

Verwandte Themen