在.NET 6独立模式Azure Function中使用Python.NET遇模块缺失问题
解决Azure Functions中Python.NET找不到本地Python模块的问题
问题根源
Azure Functions的运行目录逻辑和普通控制台应用不一样,默认Python引擎不会自动扫描bin目录下的模块,再加上.NET 6独立模式的部署特性,导致模块路径没被加入Python的搜索路径里。
具体解决步骤
手动添加模块路径到Python的sys.path
修改你的C#代码,在初始化Python引擎后,把模块所在目录添加到Python的系统搜索路径中:Runtime.PythonDLL = @"python310.dll"; PythonEngine.Initialize(); // 获取当前函数的运行工作目录 var workingDir = System.IO.Directory.GetCurrentDirectory(); // 拼接wmbus2json模块所在的bin目录路径 var moduleDir = System.IO.Path.Combine(workingDir, "bin"); // 导入Python的sys模块,添加路径 dynamic sys = Py.Import("sys"); sys.path.append(moduleDir); // 现在再导入目标模块 var parser = Py.Import(@"wmbus2json");如果你的模块直接放在函数的工作目录下,直接把
workingDir添加到sys.path就行。确保Python模块文件被复制到输出目录
在Azure Functions项目里,找到wmbus2json相关的所有Python文件(包括模块文件夹、__init__.py等),右键选择「属性」,把「复制到输出目录」设置为「始终复制」或者「如果较新则复制」,这样构建时文件会同步到bin目录。检查Python环境一致性
- 保证本地运行Azure Functions时用的Python3.10版本,和你之前控制台应用的版本完全一致(包括32/64位)。
- 如果
python310.dll路径不确定,直接写完整绝对路径,比如@"C:\Python310\python310.dll",避免环境变量导致的路径错误。
独立模式部署的额外注意
要是用.NET 6独立模式发布,得确保Python运行时的相关文件(比如python310.dll、Python的Lib和DLLs目录)要么一起打包到发布目录,要么运行环境里已经安装了对应版本的Python。
内容的提问来源于stack exchange,提问作者wmmhihaa
相关产品推荐
相关产品推荐

