在 spyder 中使用 pythonnet 导入 dll
importing dlls with pythonnet in spyder
我有一个 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
但是,python 似乎无法导入 .dll,因为我得到了 ModuleNotFoundError: No module named 'cs_backend'
。
奇怪的是这个错误只发生在 运行 来自 Spyder 的代码中。从 Visual Studio 代码执行完全相同的代码工作得很好。
您知道问题出在哪里吗?
系统规格
- os: windows 10
- .net framework v4.5.1
- python 3.8.5
- spyder 4.2.1
编辑:
我在 python 网络代表 os 上找到了一个 github issue,它描述了一个类似(尽管不完全相同)的问题。然而,由于它已经开放了大约 3 年,似乎在这方面几乎没有任何进展。
编辑 2:
堆栈溢出这里也有类似的question。解决方案是安装更新的 .NET Framework。这不是我的问题,因为对于 Spyder 以外的任何 IDE,代码都可以正常工作。因此,我猜这主要是Spyder的问题。
目前,似乎没有办法或努力解决这个问题。
看起来问题是由Spyder 中集成的IPython 控制台引起的。
一个简单的解决方法是从系统控制台执行 python 脚本。
在 Spyder 中,这可以通过 运行 - 每个文件的配置 - 在外部系统控制台中执行。
使用新配置,至少可以 运行 脚本。
我有一个 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
但是,python 似乎无法导入 .dll,因为我得到了 ModuleNotFoundError: No module named 'cs_backend'
。
奇怪的是这个错误只发生在 运行 来自 Spyder 的代码中。从 Visual Studio 代码执行完全相同的代码工作得很好。
您知道问题出在哪里吗?
系统规格
- os: windows 10
- .net framework v4.5.1
- python 3.8.5
- spyder 4.2.1
编辑:
我在 python 网络代表 os 上找到了一个 github issue,它描述了一个类似(尽管不完全相同)的问题。然而,由于它已经开放了大约 3 年,似乎在这方面几乎没有任何进展。
编辑 2:
堆栈溢出这里也有类似的question。解决方案是安装更新的 .NET Framework。这不是我的问题,因为对于 Spyder 以外的任何 IDE,代码都可以正常工作。因此,我猜这主要是Spyder的问题。
目前,似乎没有办法或努力解决这个问题。
看起来问题是由Spyder 中集成的IPython 控制台引起的。 一个简单的解决方法是从系统控制台执行 python 脚本。 在 Spyder 中,这可以通过 运行 - 每个文件的配置 - 在外部系统控制台中执行。 使用新配置,至少可以 运行 脚本。