【问题标题】:Alternatives for interaction between C# and Python application -- Pythonnet vs DLL vs shared memory vs messagingC# 和 Python 应用程序之间交互的替代方案——Pythonnet vs DLL vs 共享内存 vs 消息传递
【发布时间】:2020-06-11 07:07:02
【问题描述】:

我们有一个大型 C# 应用程序,想在 C# 中包含一个用 python 和 cython 编写的应用程序

操作系统:Win 10 蟒蛇:2.7 .NET:4.5+

我正在这里寻找各种实施方案。 (1) pythonnet - 将 python 嵌入到 C# 应用程序中,如果我有 abc.py 并且在 C# 中,而 abc.py 有一行“import numpy”,它是否知道如何在 C# 中包含所有 python 的依赖项?

(2) 将 python 转换为 .dll - 如果我错了,请纠正我,在 clr.CompileModules 中包含所有 python 文件和库似乎是一件令人头疼的事情。有没有自动解决方案? (而 clr 似乎是迄今为止我发现的从 python 构建 dll 的唯一解决方案。

(3) 将C#的.exe转换为.dll - 我不知道我是否可以这样做,我只有pyinstaller构建的abc.exe

(4) 共享内存似乎是另一种选择,但设置会更复杂,更不稳定? (因为还需要处理一个组件?)

(5) 消息传递 - zeromq 可能是它的候选者。

要求: C# 和 python 都有很多类和对象,它们需要持久化 C#应用程序需要与Python应用程序交互 它们是实时运行的,因此通信性能确实很重要,以毫秒为单位。

我相信有人应该经历过类似的情况,我正在寻求建议以找到最合适的解决方案,以及上述解决方案的优缺点。 稳定性是第一位的,然后解决方案越简单越好。

【问题讨论】:

  • 这个问题不适合 S.O.检查这个:ironpython.net
  • 感谢 Gusman,我确实尝试过 Ironpython,但遇到了 Ironpython 不支持某些 Python 库(例如 numpy)的问题。因此,它已经从我的列表中删除了
  • 我遇到了类似的问题......需要将一堆变量从 C# 传递给 python,我知道技术上共享内存可以工作......但在此之前我想寻求简单的解决方案这允许我在 C# 中无缝调用 python 方法,就像我调用另一个 C# 方法一样(或者它不存在??)我仍在研究...如果你找到任何好的方法,请告诉我!

标签: c# python-2.7 zeromq shared-memory python.net


【解决方案1】:

对于变体 1:在我的 TensorFlow 绑定中,我只需将 conda 环境的内容添加到 NuGet 包。然后你只需要指向 Python.NET 来使用那个环境而不是系统 Python 安装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-26
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多