Cython,删除setup.py中的numpy依赖项

Cython,删除setup.py中的numpy依赖项,numpy,cython,setuptools,distutils,Numpy,Cython,Setuptools,Distutils,为了使用numpy构建Cython扩展,必须在“setup.py”中添加numpy.get\u include(): 否则,将出现以下错误: fatal error: numpy/arrayobject.h: No such file or directory 即使直接从预编译的.c文件构建扩展名 显而易见的解决方案是预先安装numpy 但是setup.py install安装软件包是安装所有软件包依赖项(包括numpy)的常用方法。在分发软件包时,是否有任何方法可以消除对numpy的依赖,即

为了使用numpy构建Cython扩展,必须在“setup.py”中添加
numpy.get\u include()

否则,将出现以下错误:

fatal error: numpy/arrayobject.h: No such file or directory
即使直接从预编译的.c文件构建扩展名

显而易见的解决方案是预先安装numpy

但是
setup.py install
安装软件包是安装所有软件包依赖项(包括numpy)的常用方法。在分发软件包时,是否有任何方法可以消除对numpy的依赖,即人们不必在运行
setup.py install
之前安装numpy

我曾考虑将numpy.h文件包括在发行版中,但我担心版本与用户现有的numpy版本冲突

可能尝试导入,如果我得到一个
ImportError
,是否包含打包的.h文件?有没有标准/更简单的方法


编辑:或者在运行
setup()
之前有没有办法强制安装numpy?

这可能很难看,但我这样做是为了强制安装/升级:

from pkg_resources import parse_version

## Install numpy if it is not found or too old
try:
    import numpy
    if parse_version(numpy.__version__) < parse_version('1.10'):
        print("numpy {} was found but is too old. Upgrading.".format(numpy.__version__))
        raise ImportError
    print("Numpy was found. Build extensions.")
except ImportError:
    print("Building Cython extensions requires numpy. Installing numpy.")
    import pip
    pip_args = ['install', numpy_req]
    pip.main(pip_args)
    import numpy
从pkg_资源导入解析_版本
##如果找不到或太旧,请安装numpy
尝试:
进口numpy
如果parse_version(numpy.uu version)
这可能很难看,但我这样做是为了强制安装/升级:

from pkg_resources import parse_version

## Install numpy if it is not found or too old
try:
    import numpy
    if parse_version(numpy.__version__) < parse_version('1.10'):
        print("numpy {} was found but is too old. Upgrading.".format(numpy.__version__))
        raise ImportError
    print("Numpy was found. Build extensions.")
except ImportError:
    print("Building Cython extensions requires numpy. Installing numpy.")
    import pip
    pip_args = ['install', numpy_req]
    pip.main(pip_args)
    import numpy
从pkg_资源导入解析_版本
##如果找不到或太旧,请安装numpy
尝试:
进口numpy
如果parse_version(numpy.uu version)
(可能不是您想要的,但是)如果您使用MemoryView而不是
ndarray
s编写Cython扩展,则不需要依赖于numpy头。@DavidW谢谢!我过去常写记忆视图,但有人告诉我这是不必要的。这是一个很好的论点,可以将它们打包。它是有效的,但是MemoryView不能为多处理而被pickle,需要被转换回ndarray(有开销)。(可能不是您想要的,但是)如果您使用MemoryView而不是
ndarray
s编写Cython扩展,您不需要依赖于numpy头。@DavidW谢谢!我过去常写记忆视图,但有人告诉我这是不必要的。这是一个很好的论点,可以将它们打包。它是有效的,但是MemoryView不能被多处理所酸洗,需要被转换回ndarray(有开销)。