无法打开包含文件:“gmp.h”:没有这样的文件或目录(Python/Cython)

Cannot open include file: 'gmp.h': No such file or directory (Python/Cython)

提问人:chdy 提问时间:12/21/2021 更新时间:4/4/2022 访问量:1830

问:

我正在学习如何将 gmpy2 与 Cython 集成。从文档中,我得到了一个示例代码。由于我不太确定发生了什么,我觉得我可以通过使用提供的示例代码来学习如何在 Cython 中使用 gmpy。

示例代码:
setup.py

   "A minimal setup.py for compiling test_gmpy2.pyx"
    
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Build import cythonize
    import sys
    
    ext = Extension("test_gmpy2", ["test_gmpy2.pyx"], include_dirs=sys.path, libraries=['gmp', 'mpfr', 'mpc'])
    
    setup(
        name="cython_gmpy_test",
        ext_modules=cythonize([ext], include_path=sys.path)
    )

test_gmpy2.pyx

    "A minimal cython file test_gmpy2.pyx"

    from gmpy2 cimport *
    
    cdef extern from "gmp.h":
        void mpz_set_si(mpz_t, long)
    
    import_gmpy2()   # needed to initialize the C-API
    
    cdef mpz z = GMPy_MPZ_New(NULL)
    mpz_set_si(MPZ(z), -7)
    
    print(z + 3)

运行 setup.py 给了我这个错误:

fatal error C1083: Cannot open include file: 'gmp.h': No such file or directory

怎么了?我该如何解决?我检查了我的安装是否有 gmpy。我相信这没有任何问题。

蟒蛇 Cython GMPY

评论

0赞 12944qwerty 12/21/2021
是否与文件位于同一目录中?gmp.h
1赞 casevh 12/21/2021
我维护gmpy2。如果您使用的是 Linux,则需要安装 GMP、MPFR 和 MPC 的开发头文件。 或类似的东西会这样做。如果您使用的是 Windows,请告诉我。sudo apt install libmpc-dev
0赞 chdy 12/21/2021
你好!gmp.h 与文件不在同一个目录中,我使用的是 windows。
0赞 casevh 12/21/2021
好消息:我能够在 Windows 上成功构建 Cython 测试套件。坏消息:我没有正确记录它。我创建了 github.com/aleaxit/gmpy/issues/320 来记录该过程。如果您可以帮助测试/提供反馈,请在那里发表评论。一旦它起作用,我就会留下一个完整的答案。

答:

1赞 GBy 4/4/2022 #1

我可以举一个工作的例子。fractalshades 软件包包括一个 Cython 扩展,它导入 () gmpy2 并在 Linux 和 Windows 下编译。cimport

Cython 扩展的代码托管在此处 https://github.com/GBillotey/Fractalshades/blob/master/src/fractalshades/mpmath_utils/FP_loop.pyx

针对 Windows(使用 MS Visual Studio)编译的关键部分是:

  • 包括 GMPY2 安装目录中的头文件
  • 在 dll 中调用函数时,导入库(.lib 文件)是必需的 - 它提供了在运行时挂接到 DLL 的存根。要生成这些 .lib,可以使用 Visual Studio 提供的 dumpbin 和 lib 可执行文件。

有关实现详细信息,Windows 版本在 github 运行器上运行,完整脚本可作为 Github 工作流使用。