使用c#激活虚拟环境

Activate Virtual environment using c#

是否可以在不使用 anaconda 提示符的情况下激活创建的虚拟环境? 例如,我想在 c# 中激活我的虚拟环境以执行我的 python 代码。

这是我当前的代码

private void CallPython()
    {
        // 1) Create Process Info
        var psi = new ProcessStartInfo();
        psi.FileName = @"C:\Anaconda3\envs\MTCNN\python.exe"; 

        // 2) Provide script and arguments

        //THERMAL CAMERA
        var script = @"D:\Dekstop\thermal_MTCNN.py";


        psi.Arguments = $"\"{script}\"";
     
        // 3) Process configuration
        psi.UseShellExecute = false;
        psi.CreateNoWindow = true;
        psi.RedirectStandardOutput = true;

        // 4) Execute process and get output

       var process = Process.Start(psi);
        process.StandardOutput.ReadToEnd();
    }

好像我的python代码无法执行,因为虚拟环境没有激活。 有没有人知道如何不使用提示激活环境?

我找到了执行此操作的方法,但我仍然必须打开命令提示符。

首先,我在visual studio中创建了一个控制台项目。然后,我通过转到项目的属性并将输出类型更改为 Windows 应用程序,将控制台变成 Windows 应用程序。之后更改您的代码

class ProjectTitle

public partial class ProjectTitle : Form

然后重建项目。然后,这会将您的 program.cs 转为 Windows 表格申请。

运行 您使用此代码生成的 Windows 表单

 static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Program());
    }

然后创建一个构造函数来初始化windows形式的组件,因此添加这段代码

public Program()
    {
        InitializeComponent();
    }

然后,您现在可以像普通 windows 表单一样创建 windows 表单设计,例如拖放工具(按钮等)

为了回答我的问题,以下是使用 C#

激活虚拟环境的方法
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardInput = true;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.UseShellExecute = false;
        process.Start();
        process.StandardInput.WriteLine("activate virtualenvName");
        process.StandardInput.WriteLine("cd C:\PathWhereYourPythonIsLocated");
        process.StandardInput.WriteLine("python hello.py");
        process.StandardInput.Flush();
        process.StandardInput.Close();
        Console.WriteLine(process.StandardOutput.ReadToEnd());
        Console.ReadKey();

原来如此!我这样做的原因是因为我希望我的输出嵌入 C# Winform 的图片框。我对 python 和 c# 嵌入有点陌生,所以我希望这对您有所帮助