使用c激活虚拟环境#

2024-06-11 11:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在不使用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代码似乎无法执行,因为虚拟环境未激活。 有人知道如何在不使用提示的情况下激活环境吗


Tags: and代码truevar虚拟环境script情况anaconda
1条回答
网友
1楼 · 发布于 2024-06-11 11:39:54

我找到了这样做的方法,但我仍然必须打开一个命令提示符

首先,我在VisualStudio中创建了一个控制台项目。然后,我通过转到项目的属性并将输出类型更改为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的picturebox。我对python和c#embedding有点陌生,所以我希望这本书能有所帮助

相关问题 更多 >