python - fatal error : 'mymodule.h' file not found - Cython compile fails to find header

标签 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 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)

我尝试了此处建议的解决方案:"'cc' failed with exit status 1" error when install python library

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

上面代码中的自定义扩展解决方案来自这里: Compiling Cython with C header files error

我还尝试了此处建议的 MacOS 特定解决方案,但这只是绝望:https://github.com/wesm/feather/issues/61

export MACOSX_DEPLOYMENT_TARGET=10.11

但不幸的是,它仍然无法正常工作。我确信 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"]

最佳答案

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

import pyximport
pyximport.install()

还是调用hello_world中的函数之前的代码。这似乎导致了问题。当我删除这两行时,可以正常调用该函数。

关于python - fatal error : 'mymodule.h' file not found - Cython compile fails to find header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499517/

相关文章:

c - 如何在c中的函数中动态分配内存?

c - 用C中的字符串重新分配会导致错误

macos - 不工作 scp 命令 : Connection closed by remote host (Mac OS X)

python - 无法使用自制软件 python 在 OSX 10.10 上安装任何需要 C 编译的东西

python蜘蛛返回空json文件

python - 提高输出两幅图像之间不同像素的 Python 函数的性能

python - 使用 Python 的虚拟环境

python - python 列表中的值被替换

c - C中获取换行的隐藏字符

c++ - 当 C++11 应用程序使用非 C++11 库时返回值损坏