从标准Python调用IronPython

5
如何在Python中调用IronPython函数?是否有一种简单的方法来连接两个?我需要同时拥有完整的Python库和最新的CLR,但Python .net目前没有这些功能。
迄今为止,我尝试编译一个IronPython dll,但无法正确加载它到Python中。
我的尝试是让Python可以调用IronPython。 foo.py
def foo():
    print 'hello world'

compile_ipy.py

import clr
clr.CompileModules("foo.dll", "foo.py")

我的尝试:从Python调用Iron Python。

call_ipy_from_py1.py

import ctypes
dll = ctypes.WindDLL('foo.dll')
dll.foo() # AttributeError: function 'foo' not found

call_ipy_from_py2.py

import ctypes
dll = ctypes.cdll.LoadLibrary('foo.dll')
dll.foo() # AttributeError: function 'foo' not found

能否给一个简单的例子? - Peter Wood
@PeterWood,让我们从Python中调用一个打印“Hello World”的IronPython函数开始吧,我也会包含我尝试过的内容。 - pyCthon
1个回答

3

.NET的DLL与C的DLL(可以通过ctypes使用)不同。但您可以使用Python.NET库以以下方式调用函数:

import clr # Imports Python.Runtime.dll
import foo # Imports foo.dll
foo.foo()

我不知道你所说的“Python .net目前没有的最新CLR”是什么意思。你可以使用此处提供的版本:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonnet,如果你需要使用CPython 3,我正在使用它与.NET 4.5.1库无问题地配合使用。


我不知道这些二进制文件,但是当我以这种方式安装后,使用import clr时出现以下错误:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。 - pyCthon
另外,在PythonNet源代码页面上,他们将CLR 4.0列为最新版本。http://sourceforge.net/projects/pythonnet/files/ - pyCthon
关于第一条评论:通常意味着它找不到DLL文件或者你安装了错误的文件(即在32位系统上安装了64位)。 Python.Runtime.dllclr.pyd是否在您的site-packages目录中? - filmor
1
关于第二个链接:那个页面已经非常过时了,因为该项目已经被放弃。开发工作在这里继续进行:https://github.com/pythonnet/pythonnet 和这里(针对Python 3):https://github.com/renshawbay/pythonnet。 - filmor
是的,Python.Runtime.dllclr.pyd都在我的site-packages目录中。至于你提到的第二点,过时的软件包是我想要从Python调用IronPython的原因之一。 - pyCthon
2
啊,我现在已经成功解决了这个问题,它与我的Python根目录中的另一个clr.pyd文件发生了冲突。 - pyCthon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接