WPF使用Pythonnet调用Python,打包成exe
时间: 2024-12-30 21:21:03 浏览: 7
### WPF 应用程序中使用 Python.NET 调用 Python 代码并打包为 EXE 文件
#### 使用 Python.NET 在 C# 中调用 Python 函数
为了实现在 Windows Presentation Foundation (WPF) 应用程序中调用 Python 代码的功能,可以利用 Python.NET 库。该库使得可以在 .NET 环境下调用 Python 解释器以及执行任意 Python 代码成为可能[^1]。
安装 Python.NET 及其依赖项之后,在 Visual Studio 的项目文件里添加对 `Python.Runtime.dll` 和其他必要组件的引用。接着可以通过如下方式加载 Python 模块:
```csharp
using System;
using Python.Runtime;
namespace WpfAppWithPython {
public partial class MainWindow : Window {
private void CallPythonFunction() {
using (Py.GIL()) { // 获取全局解释器锁
dynamic np = Py.Import("numpy"); // 导入 numpy 模块作为示例
Console.WriteLine(np.cos(0)); // 输出 cos(0),即 1.0
}
}
}
}
```
这段代码展示了如何导入 Python 的 NumPy 库并在控制台打印余弦值。
#### 将应用程序打包成可独立运行的 EXE 文件
完成开发后,通常希望将解决方案编译为单个易于分发的可执行文件。为此目的推荐采用第三方工具如 pyinstaller 或者 Costura.Fody 来处理嵌入资源和外部 DLLs。
对于基于 MSBuild 的构建过程来说,Costura.Fody 是一种不错的选择因为它可以直接集成到项目的 `.csproj` 配置当中,并自动复制所需的 Python 运行时和其他动态链接库至最终生成物之中。
编辑 `.csproj` 文件加入 FodyWeavers.xml 设置节点:
```xml
<ItemGroup>
<PackageReference Include="Fody" Version="6.*"/>
<PackageReference Include="Costura.Fody" Version="5.*"/>
</ItemGroup>
<PropertyGroup>
<PostBuildEvent>xcopy /Y "$(SolutionDir)\packages\python.net.x.y.z\lib\netstandard2.0\*.dll" "$(TargetDir)"</PostBuildEvent>
</PropertyGroup>
```
上述 XML 片段指示 NuGet 安装 Costura.Fody 插件并将 Python.NET 的二进制副本放置于输出目录内以便被打包进去。
最后一步就是配置发布选项以确保所有必需文件都被正确包含进来。如果选择了 ClickOnce 发布,则需手动指定额外的依赖关系;而对于简单的自解压档案形式则无需特别设置。
阅读全文