C#调用IronPython脚本提示“No module named openpyxl”问题求助
解决IronPython调用时找不到openpyxl模块的问题
问题根源
你遇到的No module named 'openpyxl'错误,核心原因是IronPython与标准CPython是两个独立的Python运行环境:
- 通过
pip install openpyxl安装的模块,存放在CPython的site-packages目录下; - C#中
Python.CreateEngine()创建的IronPython引擎,默认只会搜索自身的模块路径,无法找到CPython环境下安装的模块。
解决方案
方案1:用IronPython自带的pip安装openpyxl
IronPython自带适配自身的pip工具,用它安装依赖即可让引擎直接找到模块:
- 找到IronPython的安装目录(通常为
C:\Program Files\IronPythonXX,XX代表版本号); - 打开命令行进入该目录,执行:
ipy.exe -m pip install openpyxl
方案2:手动添加CPython模块路径到IronPython
若不想重新安装模块,可在C#代码中把CPython的site-packages路径添加到IronPython的搜索路径:
private void Save_Click(object sender, EventArgs e) { StreamWriter fs = new StreamWriter("TxtData.txt", false); for (int i = 0; i < data.Length; i++) { if (i == 2) { fs.WriteLine(today); } else { fs.WriteLine(data[i]); } } fs.Close(); Console.WriteLine("Saved"); var engine = Python.CreateEngine(); // 获取sys.path并添加CPython的site-packages路径 var sys = engine.GetSysModule(); var paths = sys.GetVariable("path") as IList<string>; // 替换为你本地CPython的site-packages实际路径 paths.Add(@"C:\Users\你的用户名\AppData\Local\Programs\Python\PythonXX\Lib\site-packages"); var scope = engine.CreateScope(); engine.ExecuteFile("MainData.py", scope); dynamic load_mas = scope.GetVariable("load_mas"); dynamic saved = load_mas(); }
注:openpyxl是纯Python实现的模块,IronPython可兼容;若模块包含C扩展,此方法可能无效。
额外提示
你的Python代码定义了save_table()函数,但当前C#代码仅调用了load_mas(),若需执行Excel保存逻辑,需在C#中补充调用:
dynamic save_table = scope.GetVariable("save_table"); save_table();
内容的提问来源于stack exchange,提问作者Argentrix
相关产品推荐
相关产品推荐

