numpy.i 丢失。推荐的安装方式是啥?
Posted
技术标签:
【中文标题】numpy.i 丢失。推荐的安装方式是啥?【英文标题】:numpy.i is missing. What is the recommended way to install it?numpy.i 丢失。推荐的安装方式是什么? 【发布时间】:2014-02-18 13:47:30 【问题描述】:我正在编写一个 C++ 库,可以使用 SWIG-Python 接口从 C++ 和 Python 调用它。我想在库中创建一些函数,以便在 Python 中使用它们时返回 numpy 数组。
SWIG 文档 [1] 说位于 numpy/docs/swig
下的 numpy.i
可用于此目的。但是我在以下系统上找不到这个目录。
yum
安装)
OS X Mavericks + Python 2.7 + NumPy 1.8(来自easy_install
)
OS X Mavericks + Python 2.7 + NumPy 1.8(由源代码 python setup.py install
构建)
如果我从 NumPy 站点获取 .tar.gz 源代码,则在 numpy-1.8.0/doc/swig
下存在 numpy.i
。但是这个文件在python setup.py install
执行时不会自动安装。
所以我想知道在我的系统上安装numpy.i
的最佳或推荐方式是什么。
当我将此库分发给我的同事时,将numpy.i
放入我的代码中可能是一个简单的解决方案。但我担心版本与他们的 NumPy 不匹配。
[1]http://docs.scipy.org/doc/numpy/reference/swig.interface-file.html
【问题讨论】:
您确定要 SWIG 而不是更新的、更 Pythonic 的 Cython 吗? (只是问。) @larsmans 我和我的同事一直在使用这个基于 SWIG 的库,因此使用 Cython 不是我的选择。 @larsmans 此外,我们的最终产品将用于 C/C++ 以最大限度地提高其速度。 Python 目前仅用于快速测试目的。 我会购买第一个原因,但为了设置快速测试,Cython 的 IME 比 SWIG 容易得多 :) 【参考方案1】:最安全的选择可能只是将numpy.i
的副本与您的项目捆绑在一起,因为 Numpy 本身当前没有安装该文件。
numpy.i
文件是使用 Numpy 的 C-API 编写的,所以向后兼容的问题就像你手动编写相应的 C 代码一样。
【讨论】:
感谢您的建议。我在源代码中包含了取自 NumPy 1.8.0 的最新numpy.i
。这似乎是目前最好的解决方案。我在上述两个系统上测试了这个numpy.i
,发现它在我的情况下没有任何问题。【参考方案2】:
您可以将以下代码 sn-p 添加到您的 setup.py
文件中,以便在构建时从 Github 下载 numpy.i
:
import re
import requests
import numpy
np_version = re.compile(r'(?P<MAJOR>[0-9]+)\.'
'(?P<MINOR>[0-9]+)') \
.search(numpy.__version__)
np_version_string = np_version.group()
np_version_info = key: int(value)
for key, value in np_version.groupdict().items()
np_file_name = 'numpy.i'
np_file_url = 'https://raw.githubusercontent.com/numpy/numpy/maintenance/' + \
np_version_string + '.x/tools/swig/' + np_file_name
if(np_version_info['MAJOR'] == 1 and np_version_info['MINOR'] < 9):
np_file_url = np_file_url.replace('tools', 'doc')
chunk_size = 8196
with open(np_file_name, 'wb') as file:
for chunk in requests.get(np_file_url,
stream=True).iter_content(chunk_size):
file.write(chunk)
它会根据 Numpy 的版本下载合适的文件,并在安装了requests library 的 Python 2 和 3 中运行。
【讨论】:
【参考方案3】:另一种可能性,类似于上面 Alberto Marquez 提出的建议,是包含一个 Makefile,它会自动下载 numpy.i
文件以防万一它丢失。这是一个例子,参见。 $PROGRAM: $PROGRAM.c
正下方的那一行:
# put here the root name of your code
PROGRAM = simple
CC = gcc
CFLAGS = -c -fPIC -O2
LFLAGS = -I/Users/nemmen/anaconda3/include/python3.5m -I/Users/nemmen/anaconda3/lib/python3.5/site-packages/numpy/core/include
all: $PROGRAM
$PROGRAM: $PROGRAM.c
[ -f ./numpy.i ] && echo "numpy.i already here, good" || wget https://raw.githubusercontent.com/numpy/numpy/master/tools/swig/numpy.i
swig -python -o $PROGRAM_wrap.c $PROGRAM.i
$(CC) $CFLAGS $PROGRAM.c -o $PROGRAM.o
$(CC) $CFLAGS $PROGRAM_wrap.c -o $PROGRAM_wrap.o $LFLAGS
ld -bundle -flat_namespace -undefined suppress -o _$PROGRAM.so *.o
clean:
rm -rf *.o *.mod *.so $PROGRAM_wrap.c numpy.i __pycache__
有关采用此 Makefile 的示例,请查看此repo。
【讨论】:
【参考方案4】:从GitHub page 下载一份 numpy.i 副本并将其放在本地目录中。
【讨论】:
以上是关于numpy.i 丢失。推荐的安装方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
win10安装visual studio 2015 出现安装包丢失或损坏是啥原因
win10安装visual studio 2015 出现安装包丢失或损坏是啥原因
win10安装visual studio 2015 出现安装包丢失或损坏是啥原因
win10安装visual studio 2015 出现安装包丢失或损坏是啥原因