2

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

我已经在我的 PC 上安装了 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:-

无法从 numpy.core 导入多数组

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

我错过了什么?

4

2 回答 2

2

“multiarray”是一个 .pyd 文件,除非有人能纠正我,否则 IronPython 似乎不支持这些文件(如何在 IronPython 中导入 .PYD 模块?)。

于 2015-05-18T12:37:58.307 回答
1

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

https://github.com/pythonnet/pythonnet

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

https://github.com/wadetb/tinynumpy

于 2015-09-07T21:53:32.367 回答