Cython,删除setup.py中的numpy依赖项
为了使用numpy构建Cython扩展,必须在“setup.py”中添加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.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(有开销)。