我在我的Python脚本中使用pythonnet
添加了一个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的嵌套命名空间的类和方法?
答案 0 :(得分:1)
我想我知道一个解决方法。使用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')
希望这有帮助。
答案 1 :(得分:1)
管理解决问题。
实际上Supplier.Bundle.dll
有两个其他依赖项,因此在将缺少的dll复制到项目根目录后,导入变得没有错误。
此外,pythonnet
软件包应该抛出有关该问题的更具体的例外情况。这将使故障排除变得更加容易。
有关此问题的更多信息:https://github.com/pythonnet/pythonnet/issues/516