这个问题与我无法分享的合理数据有关,但问题非常简单。我正在研究PyCharm 2017.1.2,python 2.7.13。
我有一个特定格式的文件(一种加密的XML,不可解析的),需要转换为Excel来修改某些值,然后将其导出回原始格式。出于某些安全原因,我无法绕过这种转换。好的,我有一个Excel加载项,我可以使用它,在两个C#DLL中,它“导入”到Excel格式并将其“导出”回奇怪的XML。
我不能使用IronPython,因为我正在设计的软件使用的文件IronPython无法管理,所以我坚持使用旧的Python 2.7。
我目前正在使用pythonnet的clr模块将DLL导入我的软件。导入代码(不合理)如下所示:
import clr
import sys
sys.path.append('C:/My/Path/To/The/DLLs/Folder')
clr.AddReference('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
clr.AddReference('My.ClassLib.DLL')
clr.AddReference('My.ExcelImportExport.DLL')
import Microsoft.Office.Interop.Excel as Excel
try:
from My.ClassLib.DLL import XMLParser
import My.ExcelImportExport.DLL
from My.ExcelImportExport.DLL import DeviceSettingsUtility
except Exception, e:
print unicode(e)
我正在使用的两个DLL都位于同一个文件夹中。 CLR添加DLL引用没有问题。
有什么奇怪的:'My.ClassLib.DLL'
一切正常:我可以毫无问题地访问它的类和方法。
但是一旦我尝试import My.ExcelImportExport.DLL
或之后的行,我就有ImportError: No module named My.ExcelImportExport.DLL
。在使用clr添加引用后,我列出了所有程序集,我看到了My.ClassLib.DLL
和My.ExcelImportExport.DLL
,因此问题不会来自此处。问题来自My.ExcelImportExport.DLL
。
我用反编译器看了两个DLL,但没有找到任何使ClassLib.DLL工作的东西,并解释了为什么另一个没有。
最后,我的问题:在DLL(C#代码)中需要什么才能导入clr?
答案 0 :(得分:0)
Pythonnet使用名称空间作为模块。没有课程或任何东西。它们是clr
的子模块。
import clr
clr.System.Console.WriteLine("foo.bar.baz")