IronPython 无法 运行 导入 numpy 的脚本

IronPython unable to run script that imports numpy

免责声明 - 我不熟悉 Python。我是一名 C# 开发人员,使用 IronPython 编写了一个应用程序来执行 Python 脚本(由其他人编写)。到目前为止,这些脚本只需要使用 import math,但我们的一位用户要求该应用程序支持 Numpy。

我已经在我的电脑上安装了 Numpy(使用 'numpy-1.9.2-win32-superpack-python2.7.exe' 文件),它在 \Lib\site-packages 下创建了一个 numpy 文件夹。我写了一个两行的 Python 脚本来测试 Numpy 是否可以访问:-

import numpy as np
x = np.array([1,2])

我 运行 来自 C# 的脚本:-

var engine = Python.CreateEngine();
engine.SetSearchPaths(new Collection<string>(new[]
{
    @"C:\Python27", 
    @"C:\Python27\DLLs", 
    @"C:\Python27\Lib", 
    @"C:\Python27\Lib\site-packages", 
    @"C:\Python27\Lib\site-packages\numpy",
    @"C:\Python27\Lib\site-packages\numpy\core"
}));
var scope = engine.CreateScope();
var scriptSource = engine.CreateScriptSourceFromString(
    _myPythonScript, 
    SourceCodeKind.Statements);
scriptSource.Execute(scope);

尽管设置了所有这些搜索路径,但最后一行抛出 ImportException:-

cannot import multiarray from numpy.core

请注意 this SO 文章类似,但没有帮助 - 第一个答案提到了一个 'mtrand.dll' 文件,我似乎没有。

我错过了什么?

"multiarray" 是一个 .pyd 文件,除非有人能纠正我,否则 IronPython 似乎不支持这些文件 (How can I import a .PYD module in IronPython?)。

您遇到了 IronPython 的主要限制 - 它不支持 CPython 的 C-API。因此你需要使用 pythonnet:

https://github.com/pythonnet/pythonnet

您可以尝试 numpy 的纯 python 实现:

https://github.com/wadetb/tinynumpy