2016-07-21 14 views
1

nicht finden, also habe ich versucht, ein einfaches Skript auszuführen, wo ich C-Code in Cython 0.24 unter MacOS 10.11 in mein Python-Projekt integrieren .5 (El Capitán). Ich bearbeite den Code mit PyCharm mit Python Version 2.7.10. Meine setup.py sieht wie folgt ausfataler Fehler: Datei'mymodule.h 'nicht gefunden - Cython-Kompilierung kann Header

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 
from Cython.Build import cythonize 
import os 

dirs = [os.getcwd()] 

ext = [Extension("hello_world", 
        include_dirs=dirs, 
        sources=["mymodule.c","hello_world.pyx"], 
        depends=["mymodule.h"])] 
setup(
    name = "testing", 
    cmdclass={'build_ext' : build_ext}, 
    ext_modules = cythonize(ext) 
) 

Er erzeugt die hello_world.c ganz gut und erzeugt auch ein Build-Verzeichnis und einen * .so Die * .pyx Datei enthält die folgende Definition-Datei, die offensichtlich die Definition übereinstimmt in mymodule.h

cdef extern from "mymodule.h": 
    cdef float MyFunction(float, float) 

habe ich versucht, hier die Lösung vorgeschlagen: "'cc' failed with exit status 1" error when install python library

export CFLAGS=-Qunused-arguments 
export CPPFLAGS=-Qunused-arguments 

und die benutzerdefinierte Erweiterung s olution bereits in obigem Code kam von hier: Compiling Cython with C header files error

Ich versuchte auch, eine hier spezifische Lösung MacOS vorgeschlagen, aber das war nur Verzweiflung: https://github.com/wesm/feather/issues/61

export MACOSX_DEPLOYMENT_TARGET=10.11 

Aber leider funktioniert es immer noch nicht. Ich bin mir sicher, dass Cython ordnungsgemäß funktioniert, da ich vorher einige Funktionen implementiert habe und sie einfach aufrufen konnte, wenn die Implementierung in Cython war. Es enthält nur tatsächlichen C-Code, wo dieses Problem für mich auftritt.

Ich hoffe jemand kann mir helfen, danke im voraus!

edit: bekomme ich folgende Fehlermeldungen

/Users/Me/.pyxbld/temp.macosx-10.11-intel-2.7/pyrex/hello_world.c:263:10: fatal error: 'mymodule.h' file not found 
#include "mymodule.h" 
     ^
1 error generated. 
Traceback (most recent call last): 
    File "/Users/Me/Dropbox/Uni/MasterThesis/PythonProjects/cython_hello_world/main.py", line 3, in <module> 
    import hello_world 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/pyximport/pyximport.py", line 445, in load_module 
    language_level=self.language_level) 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/pyximport/pyximport.py", line 234, in load_module 
    exec("raise exc, None, tb", {'exc': exc, 'tb': tb}) 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/pyximport/pyximport.py", line 216, in load_module 
    inplace=build_inplace, language_level=language_level) 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/pyximport/pyximport.py", line 192, in build_module 
    reload_support=pyxargs.reload_support) 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/pyximport/pyxbuild.py", line 102, in pyx_to_dll 
    dist.run_commands() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands 
    self.run_command(cmd) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command 
    cmd_obj.run() 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/Cython/Distutils/build_ext.py", line 164, in run 
    _build_ext.build_ext.run(self) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build_ext.py", line 337, in run 
    self.build_extensions() 
    File "/Users/Me/Library/Python/2.7/lib/python/site-packages/Cython/Distutils/build_ext.py", line 172, in build_extensions 
    self.build_extension(ext) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build_ext.py", line 496, in build_extension 
    depends=ext.depends) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ccompiler.py", line 574, in compile 
    self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) 
    File  "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/unixccompiler.py", line 122, in _compile 
    raise CompileError, msg 
ImportError: Building module hello_world failed: ["CompileError: command 'cc' failed with exit status 1\n"] 
+0

Haben Sie die fehlende Datei 'mymodule.h' irgendwo? Es wird nicht von cython/setup.py generiert –

+0

gibt es mymodule.c und mymodule.h, ja. Sie sind alle im Arbeitsverzeichnis, also dachte ich, es wäre ausreichend, os.getcwd() als include_dir zu verwenden. – meetaig

+0

Ich würde 'ext_modules = ext' anstelle von' ext_modules = cythonize (ext) 'versuchen. Zumindest habe ich 'cythonize()' nicht so genannt. –

Antwort

0

ich es auf meinem eigenen gelöst. Das Problem lag tatsächlich nicht in dem Code, den ich hier gepostet habe, sondern im Code, der die Funktion aufruft. Ich hatte die Linien

import pyximport 
pyximport.install() 

noch im Code, bevor Sie die Funktion in hello_world aufrufen. Dies scheint das Problem verursacht zu haben. Wenn ich diese zwei Zeilen entfernt habe, könnte die Funktion einfach gut heißen.