在 spyder 中使用 pythonnet 导入 dll

问题描述

我有一个 python 包,它就像一个用 C# 编写的 .dll 的包装器。二进制文件pythonnet package 导入 python。因此,用户可以从 python 端方便地访问所谓的 cs_backend.dll功能。导入如下所示:

import clr as __clr
import System as __System
__clr.AddReference(PATH_TO_CS_BACKEND + "\\cs_backend")
import cs_backend as __csb # exception thrown here

但是,当我得到 ModuleNotFoundError: No module named 'cs_backend' 时,python 似乎无法导入 .dll。

奇怪的是,此错误仅在从 Spyder 运行代码时发生。从 Visual Studio Code 执行完全相同的代码效果很好。

您知道可能是什么问题吗?


系统规格

  • 操作系统:Windows 10
  • .net 框架 v4.5.1
  • python 3.8.5
  • 间谍 4.2.1

编辑:

我在 pythonnet 存储库中发现了一个 github issue,它描述了一个类似(尽管不完全相同)的问题。然而,由于它已经开放了大约 3 年,似乎在这方面几乎没有进展。


编辑 2:

这里有一个类似的 question 堆栈溢出。解决方案是安装更新的 .NET Framework。这不是我的问题,因为使用 Spyder 以外的任何 IDE,代码都可以正常工作。因此,我猜这主要是 Spyder 的问题。

解决方法

目前,似乎没有解决方案,也没有努力解决这个问题。

问题似乎是由集成在 Spyder 中的 IPython 控制台引起的。 一个简单的解决方法是从系统控制台执行 python 脚本。 在 Spyder 中,这可以通过转到运行 - 每个文件的配置 - 在外部系统控制台中执行来完成。 使用新配置,至少可以运行脚本。