如何从 Python 中的 C# dll 导入子模块

How to import submodule from a C# dll in Python

我使用 pythonnet 在我的 Python 脚本中添加了一个 dll,如下所示:

import os
import clr
clr.AddReference(os.path.join(os.path.abspath('.'), 'dlls', 'Supplier.Bundle.dll'))
import Supplier.Bundle

它工作得很好,我可以直接从 Supplier.Bundle 命名空间调用方法或实例化 类,但是当我想从像 Supplier.Bundle.Features 这样的嵌套命名空间调用方法时,我收到错误:

AttributeError: Features

我还尝试了以下方法:

import Supplier.Bundle.Features

抛出:

ModuleNotFoundError: No module named 'Supplier.Bundle.Features'; 'Supplier.Bundle' is not a package

在 C# 中使用相同的 dll 工作得很好:

using Supplier.Bundle.Features

所以我的问题是:如何使用 pythonnet 访问 类 和 Python3.x 中 C# dll 的嵌套命名空间的方法?

我想我知道解决方法。使用 from module import。 请参阅以下示例:

import clr
clr.AddReference('System.Windows.Forms')
#import System.Windows.Forms                # <-- not working
from System.Windows.Forms import MessageBox # <-- working

MessageBox.Show('Hello World')

希望对您有所帮助。

成功解决问题。 实际上 Supplier.Bundle.dll 还有另外两个依赖项,所以在将丢失的 dll 复制到项目根目录后,导入就没有错误了。

另外,pythonnet 包应该抛出关于该问题的更具体的异常。这将使故障排除更加容易。

有关此问题的更多信息:https://github.com/pythonnet/pythonnet/issues/516