Python Cython Cimport未解析的外部符号

Python Cython Cimport未解析的外部符号,python,cython,Python,Cython,我的setup.py是: from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import numpy as np extensions = [ Extension('_hmmc', ['_hmmc.pyx'], include_dirs = [np.get_include()]), ] setup(

我的setup.py是:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np

extensions = [
    Extension('_hmmc', ['_hmmc.pyx'], include_dirs = [np.get_include()]),
    ]

setup(
    ext_modules = cythonize(extensions)
    )
我正在用cimport进行试验,以使其发挥作用

from numpy.math cimport expl

import numpy as np
print(expl(5-2))
然而,错误是

错误LNK2001:未解析的外部符号\u npy\u expl

有什么想法吗?我已检查我的cython/includes/numpy/math.pxd是否有以下内容:

长双倍EXP“npy_EXP”(长双倍x)


有什么想法吗?

可能为了保持简单,可以使用标准库中的
exp
,否则需要跳过一些障碍,才能使用
npy\u expl

通常的Numpy API是仅头部的(更准确地说,在编译-/linktime时只需要头部,请参见),但数学函数的情况并非如此。还有define,它还将numpy的数学库显示为内联函数,但这在已安装的numpy分发版上不起作用,因为这些分发版缺少
core/src
-文件夹,其中给出了数学函数的定义

因此,您必须将预编译文件添加到设置中。它可以在文件夹
core/lib
中找到,并被称为(至少在linux上)
libnpymath.a

最可靠的方法是使用
get_info
from
numpy.distutils.misc_util
,它返回一个字典,为
'define_macros'
提供值,
“包含目录”
“库”
“库目录”
-即我们需要传递给扩展的值,例如

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

from numpy.distutils.misc_util import get_info
npymath_info = get_info('npymath')

extensions = [
    Extension('_hmmc', ['_hmmc.pyx'],
               **npymath_info 
               ),
    ]

setup(
    ext_modules = cythonize(extensions)
    )


还有来自
numpy.distutils.misc_util
的函数
get_mathlibs
,但它只有在
\u numpyconfig.h
存在时才起作用,至少在我的安装中不是这样

可能为了保持简单,可以使用标准库中的
exp
,否则需要跳过一些障碍,才能使用
npy\u expl
使其工作

通常的Numpy API是仅头部的(更准确地说,在编译-/linktime时只需要头部,请参见),但数学函数的情况并非如此。还有define,它还将numpy的数学库显示为内联函数,但这在已安装的numpy分发版上不起作用,因为这些分发版缺少
core/src
-文件夹,其中给出了数学函数的定义

因此,您必须将预编译文件添加到设置中。它可以在文件夹
core/lib
中找到,并被称为(至少在linux上)
libnpymath.a

最可靠的方法是使用
get_info
from
numpy.distutils.misc_util
,它返回一个字典,为
'define_macros'
提供值,
“包含目录”
“库”
“库目录”
-即我们需要传递给扩展的值,例如

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

from numpy.distutils.misc_util import get_info
npymath_info = get_info('npymath')

extensions = [
    Extension('_hmmc', ['_hmmc.pyx'],
               **npymath_info 
               ),
    ]

setup(
    ext_modules = cythonize(extensions)
    )

还有来自
numpy.distutils.misc_util
的函数
get_mathlibs
,但它只有在
\u numpyconfig.h
存在时才起作用,至少在我的安装中不是这样