首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pythonnet核心“没有命名的模块”

Pythonnet核心“没有命名的模块”
EN

Stack Overflow用户
提问于 2021-06-14 12:52:42
回答 3查看 2.7K关注 0票数 7

我试图通过使用.NET在朱庇特笔记本python脚本中使用PythonNet核心库。最近添加了对.NET核心的支持(请参阅https://github.com/pythonnet/pythonnet/issues/984#issuecomment-778786164),但我仍然收到一个No module named 'TestAppCore'错误。

我在使用.NET框架库和PythonNet时没有任何问题,只有.NET核心。任何帮助诊断和解决这一问题将不胜感激。

我正在尝试的C#库是一个简单的类库项目,完全没有依赖项。以下是整个守则:

代码语言:javascript
复制
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脚本:

代码语言:javascript
复制
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)

这是输出:

最后,下面是我使用的运行时配置:

代码语言:javascript
复制
{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    }
  }
}

3.7

  • pythonnet: 3.0.0.dev1

  • clr-loader:

  • .NET Core: 3.1

  • python版本: 0.1.6
EN

回答 3

Stack Overflow用户

发布于 2021-12-09 15:00:25

我怀疑您弄错了DLL路径。这对我起了作用:

代码语言:javascript
复制
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()

使用

代码语言:javascript
复制
Python 3.8.10
pythonnet 3.0.0a1
clr-loader 0.1.7

针对C#核心3.1的.NET DLL (类库)

pythonnetconfig.json和你贴的一模一样。

票数 0
EN

Stack Overflow用户

发布于 2022-09-02 14:57:14

我从未让它与.NET Core3.1一起工作。对我来说,它与.NET框架4.8和pythonnet2.5.2一起工作。See my other answer for more details

票数 0
EN

Stack Overflow用户

发布于 2022-11-18 18:12:28

我有一个类似的问题,发现如果DLL和命名空间是相同的,那么它就失败了。在我的例子中,下面是pythonnet教程:

代码语言:javascript
复制
Calculate.sln contains Calc.cs, with

namespace Calculate;  // recommended by VS
class Calc { ... }

然后用Python

代码语言:javascript
复制
clr.AddReference("Calculate") # Assuming sys.path correct setting
from Calculate import Calc

然后: ImportError:无法从“计算”(未知位置)中导入名称“Calc”

但有:

代码语言:javascript
复制
namespace CalculateNS;  // different name than Calculate.dll
class Calc { ... }

然后用Python

代码语言:javascript
复制
clr.AddReference("Calculate") # Assuming sys.path correct setting
from CalculateNS import Calc

起作用了..。副作用,幽门已知的计算模块,但没有CalculateNS :-(

有人做过这个实验吗?我看到了很多从未被测试过的答案,只有一些想法。

使用.NET 6.0框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67970591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档