如何从Python

时间:2017-07-24 09:38:16

标签: c# python .net namespaces python.net

我在我的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的嵌套命名空间的类和方法?

2 个答案:

答案 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