找不到 numpy.i
Trouble finding numpy.i
我想使用 swig 在 python 中包装一些 c++ 代码,我需要能够使用 numpy.i 将 numpy 数组转换为向量。
这是一个非常令人沮丧的过程,因为我无法在网上找到任何有用的信息来说明我实际上从哪里得到 numpy.i。
这是我目前拥有的 运行ning:
numpy 1.17.3
痛饮 2.0.12
python 3.7.3
Debian 4.9.2
通过阅读 https://docs.scipy.org/doc/numpy/reference/swig.interface-file.html 我得知 numpy.i 应该位于 tools/swig/numpy.i,尽管我的机器上唯一可以找到的地方是 numpy.i在我升级的 python 2.7 文件夹中。我的 python (3.7.3) 工作版本没有这样的文件。
$ locate numpy.i
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i
我试过的:
正在将 numpy.i(如上所述)复制到我的工作文件夹中。这至少在我调用 %include "numpy.i" 时被我的 test.i 文件识别,但它似乎不允许使用 numpy.i 调用。
将此代码 https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i 复制到一个名为 numpy.i 的新文件中,并将其放入我的文件夹中,但是当我尝试 运行 时出现很多错误它。
是否有标准方法来获取正确的 numpy.i 版本?我从哪里下载它,我应该把它放在哪里?
我在下面包含了一些代码作为参考:
test.i:
%module test
%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include "numpy.i" //this doesn't seem to do anything
%init %{
import_array();
%}
%apply (int DIM1) {(char x)}; //this doesn't seem to do anything
%include "test.h"
test.h:
#include <iostream>
void char_print(char x);
test.cpp:
#include "test.h"
void char_print(char x) {
std::cout << x << std::endl;
return;
}
tester.py:
import test
test.char_print(5) #nothing is printed, since this isn't converted properly to a char.
这只是一个简单的例子,但我已经尝试过以多种不同的方式使用 numpy.i(包括复制和粘贴适用于他们的其他人的代码),但它始终不会改变任何东西,无论我是否在我的 test.i 文件中。
Where/how 我得到 numpy.i 吗?
问题:我从python2.7包复制过来的numpy.i文件不兼容,不包含兼容版本当你通过 anaconda 时在安装包中(仍然不确定他们为什么要这样做)。
答案:找到你的numpy版本运行,然后到这里(https://github.com/numpy/numpy/releases)下载numpy-[your_version.zip 文件,然后专门复制 numpy.i 文件,在 numpy-[your_version]/tools/swig/ 中找到。现在将 numpy.i 粘贴到您的项目工作目录中。
您应该从 https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i 下载新的 numpy.i 文件。在这个 numpy.i 文件中没有 PyFile_Check 功能, python3 不支持。如果你还在用
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i
,您的代码可能会出现错误undefined symbol: PyFile_Check
,因为只有python2可以支持PyFile_Check
功能。
对了,出现undefined symbol: PyFile_Check
的错误,不一定是SWIG的问题。
我想使用 swig 在 python 中包装一些 c++ 代码,我需要能够使用 numpy.i 将 numpy 数组转换为向量。
这是一个非常令人沮丧的过程,因为我无法在网上找到任何有用的信息来说明我实际上从哪里得到 numpy.i。
这是我目前拥有的 运行ning:
numpy 1.17.3
痛饮 2.0.12
python 3.7.3
Debian 4.9.2
通过阅读 https://docs.scipy.org/doc/numpy/reference/swig.interface-file.html 我得知 numpy.i 应该位于 tools/swig/numpy.i,尽管我的机器上唯一可以找到的地方是 numpy.i在我升级的 python 2.7 文件夹中。我的 python (3.7.3) 工作版本没有这样的文件。
$ locate numpy.i
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i
我试过的:
正在将 numpy.i(如上所述)复制到我的工作文件夹中。这至少在我调用 %include "numpy.i" 时被我的 test.i 文件识别,但它似乎不允许使用 numpy.i 调用。
将此代码 https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i 复制到一个名为 numpy.i 的新文件中,并将其放入我的文件夹中,但是当我尝试 运行 时出现很多错误它。
是否有标准方法来获取正确的 numpy.i 版本?我从哪里下载它,我应该把它放在哪里?
我在下面包含了一些代码作为参考:
test.i:
%module test
%{
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include "numpy.i" //this doesn't seem to do anything
%init %{
import_array();
%}
%apply (int DIM1) {(char x)}; //this doesn't seem to do anything
%include "test.h"
test.h:
#include <iostream>
void char_print(char x);
test.cpp:
#include "test.h"
void char_print(char x) {
std::cout << x << std::endl;
return;
}
tester.py:
import test
test.char_print(5) #nothing is printed, since this isn't converted properly to a char.
这只是一个简单的例子,但我已经尝试过以多种不同的方式使用 numpy.i(包括复制和粘贴适用于他们的其他人的代码),但它始终不会改变任何东西,无论我是否在我的 test.i 文件中。
Where/how 我得到 numpy.i 吗?
问题:我从python2.7包复制过来的numpy.i文件不兼容,不包含兼容版本当你通过 anaconda 时在安装包中(仍然不确定他们为什么要这样做)。
答案:找到你的numpy版本运行,然后到这里(https://github.com/numpy/numpy/releases)下载numpy-[your_version.zip 文件,然后专门复制 numpy.i 文件,在 numpy-[your_version]/tools/swig/ 中找到。现在将 numpy.i 粘贴到您的项目工作目录中。
您应该从 https://github.com/numpy/numpy/blob/master/tools/swig/numpy.i 下载新的 numpy.i 文件。在这个 numpy.i 文件中没有 PyFile_Check 功能, python3 不支持。如果你还在用
/usr/lib/python2.7/dist-packages/instant/swig/numpy.i
,您的代码可能会出现错误undefined symbol: PyFile_Check
,因为只有python2可以支持PyFile_Check
功能。
对了,出现undefined symbol: PyFile_Check
的错误,不一定是SWIG的问题。