Python 致命错误:';mymodule.h';找不到文件-Cython compile找不到头文件

Python 致命错误:';mymodule.h';找不到文件-Cython compile找不到头文件,python,c,macos,pycharm,cython,Python,C,Macos,Pycharm,Cython,因此,我一直在尝试运行一个简单的脚本,其中我使用MacOS 10.11.5(El Capitan)下的Cython 0.24将C代码合并到我的python项目中。我使用PyCharm和Python版本2.7.10编辑代码。我的setup.py看起来像这样 from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext from Cyt

因此,我一直在尝试运行一个简单的脚本,其中我使用MacOS 10.11.5(El Capitan)下的Cython 0.24将C代码合并到我的python项目中。我使用PyCharm和Python版本2.7.10编辑代码。我的setup.py看起来像这样

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)
)
它可以生成hello_world.c,还可以生成一个构建目录和一个*.so文件 *.pyx文件包含以下定义,显然与mymodule.h中的定义相匹配

cdef extern from "mymodule.h":
    cdef float MyFunction(float, float)
我尝试了这里建议的解决方案:

上述代码中已有的自定义扩展解决方案来自这里:

我还尝试了这里建议的MacOS特定解决方案,但那只是绝望:

但不幸的是,它仍然不起作用。我确信Cython工作正常,因为我预先实现了一些函数,并且可以在Cython中实现时很好地调用它们。它只是包含了实际的C代码,我遇到了这个问题

我希望有人能帮助我,提前谢谢

编辑: 我收到以下错误消息

/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"]
/Users/Me/.pyxbld/temp.macosx-10.11-intel-2.7/pyrex/hello\u world.c:263:10:致命错误:找不到“mymodule.h”文件
#包括“mymodule.h”
^
生成1个错误。
回溯(最近一次呼叫最后一次):
文件“/Users/Me/Dropbox/Uni/MasterThesis/PythonProjects/cython\u hello\u world/main.py”,第3行,在
导入hello_world
load_模块中的文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/pyximport/pyximport.py”,第445行
语言水平=自我。语言水平)
load_模块中的文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/pyximport/pyximport.py”,第234行
exec(“raiseexc,None,tb”,{'exc':exc,'tb':tb})
load_模块中的文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/pyximport/pyximport.py”,第216行
就地=构建\就地,语言\级别=语言\级别)
文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/pyximport/pyximport.py”,第192行,在build_模块中
重新加载\u支持=pyxargs.reload\u支持)
文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/pyximport/pyxbuild.py”,第102行,在pyx_to_dll中
dist.run_命令()
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py”,第953行,在run_命令中
self.run_命令(cmd)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py”,第972行,在run_命令中
cmd_obj.run()
文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/Cython/Distutils/build_ext.py”,第164行,运行中
_构建外部。构建外部。运行(自身)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build_ext.py”,第337行,运行中
self.build_扩展()
文件“/Users/Me/Library/Python/2.7/lib/Python/site packages/Cython/Distutils/build\u ext.py”,第172行,在build\u extensions中
自构建扩展(ext)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/build_ext.py”,第496行,内部版本扩展名
dependens=ext.dependens)
compile中的文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/ccompiler.py”,第574行
自我编译(obj、src、ext、cc参数、额外的postargs、pp选项)
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/unixcompiler.py”,第122行,在编译中
升起编译器错误,msg
ImportError:生成模块hello\u world失败:[“CompileError:命令'cc'失败,退出状态为1\n”]

我自己解决了这个问题。问题实际上不在我发布的代码中,而是在调用函数的代码中。 我有台词

import pyximport
pyximport.install()

在hello_world中调用函数之前仍在代码中。这似乎是问题的根源。当我删除这两行时,函数就可以很好地调用了。

我自己解决了它。问题实际上不在我发布的代码中,而是在调用函数的代码中。 我有台词

import pyximport
pyximport.install()

在hello_world中调用函数之前仍在代码中。这似乎是问题的根源。当我删除这两行时,函数可以正常调用。

你知道缺少的文件
mymodule.h
在什么地方吗?它不是由cython/setup.py生成的。有mymodule.c和mymodule.h,是的。它们都在工作目录中,所以我认为使用os.getcwd()作为include\u dirI就足够了。我会尝试
ext\u modules=ext
而不是
ext\u modules=cythonize(ext)
。至少我没有见过像这样调用cythonize()。是的,这也是一个问题。但它并没有解决我的问题。我在下面的答案中找到了解决办法。但是谢谢你的帮助:)你在哪里找到了丢失的文件
mymodule.h
?它不是由cython/setup.py生成的。有mymodule.c和mymodule.h,是的。它们都在工作目录中,所以我认为使用os.getcwd()作为include\u dirI就足够了。我会尝试
ext\u modules=ext
而不是
ext\u modules=cythonize(ext)
。至少我没有见过像这样调用cythonize()。是的,这也是一个问题。但它并没有解决我的问题。我在下面的答案中找到了解决办法。但是谢谢你的帮助:)
import pyximport
pyximport.install()