在C#中使用.PYD文件?

4
我正在使用C#开发程序,但是我刚刚意识到我要编程的东西在C#中非常困难,但在Python中很容易。所以我想做的是制作一个.PYD文件,并在C#程序中使用它,但我不知道如何操作。我一直在搜索相关资料,但是找不到任何有用的信息。
我的问题是:我该如何在C#中使用.PYD文件?我知道.PYD文件与.DLL文件类似,所以没有安装Python的计算机是否仍然可以使用.PYD文件?

6
闻起来像 X-Y 问题。你在尝试什么在 C# 中很难但在 Python 中很容易的事情? - Fildor
你可以尝试使用IronPython脚本主机。 - dymanoid
1
你尝试过PythonNet吗?https://github.com/pythonnet/pythonnet - denfromufa
2个回答

2

.pyd文件是一个DLL文件,但是其中包含名为initspam()的函数,其中“spam”是您的.pyd文件的名称。它们不仅相似,而且完全相同!它们可以在没有Python的计算机上使用。


请注意:内置函数将不可用。在C语言中搜索它们,在您的Cython代码中添加它们作为extern,并进行编译!


嘿,那是针对Python 2的。此外,您需要通过python<version>.dll API进行操作,而Pythonnet可以实现这一点。请查看我的答案。 - user11462042

2

使用 pythonnet

教程

你需要一个 GIL 状态。

using (Py.GIL())
{
    // Your code here
}

在GIL块内,创建一个作用域。
using (Py.GIL())
{
    using (PyScope scope = Py.CreateScope())
    {
        // Your code here
    }
}

执行代码:
scope.Exec(codeStr);

设置变量:
scope.Set(name, value); // 'name' is a string and 'value' is a 'PyObject' object.

转换为PyObject:
obj.ToPython()

将您的对象放入Python中,如果需要,请转换为PyObject
要评估一个表达式[0][1][2][3][4]
scope.Eval(expr)

获取变量值:[5][6]
scope.Get(variableName)

C#代码中,如果没有在任何注释之前加上分号,并且是单行表示,则代表一个表达式

参考资料

0: https://codereview.stackexchange.com/questions/160524/evaluating-arithmetic-expressions
1: https://www.programiz.com/python-programming/methods/built-in/eval
2: Python的eval()是什么? on SO
3: https://docs.python.org/3/reference/expressions.html
4: 在字符串中评估数学表达式的Python方法 on SO
5: https://realpython.com/python-variables
6: https://www.w3schools.com/python/python_variables.asp

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