You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python.NET无法导入同目录下的自定义Python模块求助

解决.NET嵌入Python时无法导入同目录模块的问题

核心问题是Python的模块搜索路径sys.path默认未包含你的脚本所在目录——即使你确认了当前工作目录,嵌入场景下sys.path的初始配置也可能和独立运行Python时不同。以下是具体解决步骤:

1. 手动将脚本目录添加到sys.path

在C#代码中导入目标模块前,把脚本所在目录加入Python的sys.path:

using Python.Runtime;
using System;

Runtime.PythonDLL = @"*my python311.dll path*";
PythonEngine.Initialize();
using (Py.GIL())
{
    // 获取程序运行的输出目录(确保脚本已复制到这里)
    string scriptDirectory = AppDomain.CurrentDomain.BaseDirectory;
    
    // 导入sys模块并添加目录到搜索路径
    var sys = Py.Import("sys");
    sys.GetAttr("path").InvokeMethod("append", new PyString(scriptDirectory));
    
    // 现在可以正常导入自定义模块
    var recognizerModule = Py.Import("mypythonscript");
}

如果脚本不在输出目录(比如仍在项目根目录),可以用Path.GetFullPath(@"..\..\..\")这类路径回到项目根,替换上面的scriptDirectory。

2. 确保Python脚本被复制到输出目录

在Visual Studio中右键mypythonscript.py文件,选择属性,将复制到输出目录设置为如果较新则复制或始终复制。这一步是关键,否则编译后输出目录里没有脚本文件,自然无法导入。

补充排查点

  • 验证sys.path内容:可以在代码中打印sys.path确认目录是否已添加,比如Console.WriteLine(sys.GetAttr("path"));
  • 避免相对导入:不要用from . import mypythonscript这类相对导入,嵌入场景下模块的上下文可能不符合预期。

内容的提问来源于stack exchange,提问作者Mihash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:37:42