如何在无Python环境的机器上部署含Pythonnet的C#应用?
解决方案:将Pythonnet应用部署到无Python环境的机器
要让你的C#应用在未安装Python的机器上运行,核心是打包完整的Python运行环境和依赖包,同时调整代码路径配置。以下是具体步骤:
1. 创建独立的Python虚拟环境
- 用
conda或virtualenv创建一个和你本地测试版本一致的虚拟环境(比如Python 3.11.2 x86) - 在虚拟环境中安装所需依赖:
pip install pythonnet numpy - 将整个虚拟环境文件夹(比如命名为
python-env)复制到C#项目的输出目录(如bin/Debug或bin/Release)
2. 调整C#项目的部署设置
- 在C#项目的引用中,找到
Python.Runtime(NuGet包),将其复制本地属性设置为True,确保该DLL会被打包到输出目录 - 确认所有Pythonnet相关的依赖文件(如
Python.Runtime.dll)都包含在最终的部署包中
3. 修改代码路径配置
将原来硬编码的Python DLL路径改为相对路径,并添加虚拟环境的包路径,示例代码如下:
var input1 = new double[,] { { 15 }, { 274.5 } }; // 指向打包的虚拟环境中的Python DLL Runtime.PythonDLL = @".\python-env\python311.dll"; PythonEngine.Initialize(); dynamic sys = Py.Import("sys"); // 添加虚拟环境的依赖包路径和当前程序目录 sys.path.Append(@".\python-env\Lib\site-packages"); sys.path.Append(System.IO.Directory.GetCurrentDirectory()); dynamic test = Py.Import("Test"); int r1 = test.Test_fun(input1); PythonEngine.Shutdown();
4. 打包部署文件
部署时,需要将以下文件/目录一起打包:
- C#生成的exe文件
python-env整个目录Test.py文件Python.Runtime.dll及相关依赖文件
5. 关键注意事项
- 确保Python虚拟环境的架构(x86/x64)与C#项目的目标平台完全一致,否则会出现运行时错误
- 虚拟环境中安装的Python版本必须和你本地测试的版本相同(3.11.2),避免版本兼容问题
- 测试部署时,可使用工具(如Process Monitor)检查是否有缺失的依赖文件,及时补充
内容的提问来源于stack exchange,提问作者Karls
相关产品推荐
相关产品推荐

