如何从 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
我使用 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