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 可用于此目的。但是我在以下系统上找不到这个目录。

Scientific Linux 6.4(RHEL 6.4 克隆)+ Python 2.6 + NumPy 1.4(通过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 出现安装包丢失或损坏是啥原因

win10安装visual studio 2015 出现安装包丢失或损坏是啥原因

win10安装visual studio 2015 出现安装包丢失或损坏是啥原因