【问题标题】:Pythonnet dotnet core 'No module named'Pythonnet dotnet core '没有命名的模块'
【发布时间】:2021-08-30 09:07:02
【问题描述】:

我正在尝试通过 PythonNet 在 Jupyter Notebook python 脚本中使用 .NET Core 库。最近添加了对 .NET Core 的支持(请参阅 https://github.com/pythonnet/pythonnet/issues/984#issuecomment-778786164),但我仍然收到 No module named 'TestAppCore' 错误。

在 PythonNet 中使用 .NET Framework 库没有问题,只有 .NET Core。任何有关诊断和解决问题的帮助将不胜感激。

我正在尝试使用的 C# 库是一个简单的类库项目,完全没有依赖关系。以下是全部代码:

namespace TestAppCore
{
  public class Foo
  {
    public int ID { get; set; }
    
    public Foo(int id)
    {
      ID = id;
    }
    
    public int Add(int a, int b)
    {
      return a + b;
    }
  }
}

这是python脚本:

from clr_loader import get_coreclr
from pythonnet import set_runtime

rt = get_coreclr("D:\src\Test.runtimeconfig.json")
set_runtime(rt)

import clr
import sys

sys.path.append(r"D:\src\TestAppCore")
clr.AddReference(r"TestAppCore")

from TestAppCore import Foo

foo = Foo(5)
print(foo.ID)

res = foo.Add(1, 2)
print(res)

这是输出:

最后,这是我正在使用的运行时配置:

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    }
  }
}
  • .NET Core:3.1
  • python 版本:3.7
  • pythonnet: 3.0.0.dev1
  • clr-loader: 0.1.6

【问题讨论】:

    标签: python c# python.net


    【解决方案1】:

    我怀疑您的 DLL 路径有误。 这对我有用:

    from clr_loader import get_coreclr
    from pythonnet import set_runtime
    set_runtime(get_coreclr("pythonnetconfig.json"))
    import clr
    clr.AddReference("C:/Path/To/Interface.dll")
    
    from Interface import Foo
    foo = Foo()
    

    使用

    Python 3.8.10
    pythonnet 3.0.0a1
    clr-loader 0.1.7
    

    面向 .NET Core 3.1 的 C# DLL(类库)

    pythonnetconfig.json 与您发布的完全一样。

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 2023-03-25
      • 2017-06-13
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多