最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用IronPython調(diào)用python代碼的實(shí)現(xiàn)示例

 更新時(shí)間:2025年01月08日 11:43:06   作者:淀粉腸狂熱粉  
本文主要介紹了在C#中使用IronPython調(diào)用Python代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

找不到os:已解決

os是python基礎(chǔ)包,這個(gè)都找不到實(shí)在很離譜。解法是在paths中增加os的路徑。
首先在anaconda prompt中找到位置:

Python 3.9.13 (main, Aug 25 2022, 23:51:50) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
...
>>> import os
>>> os
<module 'os' from 'D:\\ProgramData\\Anaconda3\\lib\\os.py'>
>>>

所以修改C#中調(diào)用部分:

...
var paths = engine.GetSearchPaths();
paths.Add("C:\\Users\\xxxx\\.nuget\\packages\\ironpython\\3.4.1\\lib");
paths.Add("D:\\ProgramData\\Anaconda3\\lib"); // 這一句
engine.SetSearchPaths(paths);
...

此時(shí)報(bào)錯(cuò)消失。

invalid syntax:版本問題,未解決

C#中完整報(bào)錯(cuò):

引發(fā)的異常:“Microsoft.Scripting.SyntaxErrorException”(位于 Microsoft.Dynamic.dll 中)
“Microsoft.Scripting.SyntaxErrorException”類型的未經(jīng)處理的異常在 Microsoft.Dynamic.dll 中發(fā)生 
invalid syntax

參考這里:
Invalid syntax · Issue #1501 · IronLanguages/ironpython3 · GitHub
https://github.com/IronLanguages/ironpython3/issues/1501

我這里的問題就是python的版本,本地是3.9但是IronPython裝的是3.4。這個(gè)暫時(shí)沒法解決,所以我還是放棄在python中執(zhí)行了。

2021/8/27更新:c#執(zhí)行python的exe文件

這個(gè)的主要問題是慢。我的項(xiàng)目只用到matplotlib和biopython,所以通過創(chuàng)建虛擬環(huán)境,裝包,然后用pyinstaller打包的方式構(gòu)建可執(zhí)行文件。簡單測了一下,文件讀取然后繪制4w+點(diǎn)就花了10s多。。實(shí)在不能忍。所以c#調(diào)用exe還是放棄吧。

DateTime beforeDT = System.DateTime.Now;
string pyexePath = @"C:\XXXXXX\dist\drawGraph.exe";
Process p = new Process();
p.StartInfo.FileName = pyexePath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
// 我的一個(gè)參數(shù)
p.StartInfo.Arguments = @"C:\XXXX\XXX.txt";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforeDT);
Console.WriteLine("Time: {0}s", ts.TotalSeconds); 
p.Close();

C#調(diào)用python代碼和庫的幾種方法

  • 使用IronPython,直接調(diào)用python文件
    IronPython調(diào)用第三方庫需要裝庫、設(shè)路徑,可能報(bào)bug

  • 使用c++調(diào)用python,做成dll,在c#中調(diào)用dll
    需要用戶安裝python環(huán)境,慢

  • c#命令行調(diào)用py文件
    需要用戶安裝python環(huán)境

  • c#命令行調(diào)用python的exe文件

先說結(jié)論

IronPython是一個(gè)幫助c#引用python代碼的插件/庫。但是,由于我的python代碼中用到matplotlib和biopython,而這兩個(gè)包都需要numpy,可是IronPython完全不支持numpy,所以我最終放棄了這個(gè)做法。因此本文只貼最最最簡單的例子。

在這里插入圖片描述

環(huán)境

win10 + vs 2019 + netframework 4.7.2

實(shí)例

首先在工具-NuGet包管理器中搜索IronPython,安裝。我裝的版本是 2.7.11。

這里我第一次傻 了,因?yàn)镮ronPython 2.7.*就是python 2.7,IronPython 3.4才是python 3的。

然后在wpf項(xiàng)目里放一個(gè)mywindow.py文件,內(nèi)容為:

# -*- coding: utf-8 -*-
import sys

def text():
	return str(sys.path)

調(diào)用的地方這樣寫:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
public partial class WavePainter : Window
{
    public WavePainter()
    {
        InitializeComponent();
        //Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
        string basePath = AppDomain.CurrentDomain.BaseDirectory;
        string pyFilePath = basePath + @"..\..\py\mywindow.py";
        ScriptRuntime pyRuntime = Python.CreateRuntime();
        // 這里開始到dynamic py...行前都不是必須的。是指定lib path位置的
        var engine = pyRuntime.GetEngine("python");
        var pyScope = engine.CreateScope();
        var paths = engine.GetSearchPaths();
        paths.Add(basePath + @"..\..\packages\IronPython.2.7.11\lib");
        engine.SetSearchPaths(paths);
        // 執(zhí)行py文件
        dynamic py = pyRuntime.UseFile(pyFilePath);
        string a = py.text();
        tb1.Text = a;
    }
}

可以看到sys.path是真的加入內(nèi)容了。

在這里插入圖片描述

當(dāng)前,只做簡單運(yùn)算、不引用其他包的py代碼是可以跑起來的,但是如果引用諸如os這種基礎(chǔ)包都會報(bào)錯(cuò),提示模塊不存在。那么,如果實(shí)在要用,應(yīng)該裝對應(yīng)的Python環(huán)境,然后把對應(yīng)路徑加到sys.path中來,那就是能跑的。

但是前面也說了,numpy用不了,而我的客戶都沒有python環(huán)境,我也不能強(qiáng)迫他們裝,所以只能采取別的方式了,下次再更新解決方案。

到此這篇關(guān)于C#使用IronPython調(diào)用python代碼的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C# IronPython調(diào)用python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#內(nèi)存管理與資源泄漏的解決方法

    C#內(nèi)存管理與資源泄漏的解決方法

    在C#中,內(nèi)存管理主要由垃圾回收器(GC)自動處理,但資源泄漏仍可能發(fā)生,本文給大家分析了常見原因以及具體解決方法,需要的朋友可以參考下
    2026-06-06
  • C# WinForms使用CyUSB.dll訪問USB設(shè)備的實(shí)現(xiàn)步驟

    C# WinForms使用CyUSB.dll訪問USB設(shè)備的實(shí)現(xiàn)步驟

    CYUSB.dll驅(qū)動包為C#開發(fā)者提供了便捷的USB設(shè)備操作解決方案,該驅(qū)動包內(nèi)含多個(gè)版本的cyusb.dll文件,滿足不同項(xiàng)目的需求,本文給大家介紹了C# WinForms使用CyUSB.dll訪問USB設(shè)備的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2025-09-09
  • WPF實(shí)現(xiàn)自定義窗體的示例代碼

    WPF實(shí)現(xiàn)自定義窗體的示例代碼

    .Net默認(rèn)的窗體樣式只有四種,而且都比較“丑”,但是很多時(shí)候,我們希望自定義窗體,比如,無邊框,有陰影等,所以本文為大家介紹了WPF實(shí)現(xiàn)自定義窗體的方法,希望對大家有所幫助
    2023-09-09
  • C#實(shí)現(xiàn)生成mac地址與IP地址注冊碼的兩種方法

    C#實(shí)現(xiàn)生成mac地址與IP地址注冊碼的兩種方法

    這篇文章主要介紹了C#實(shí)現(xiàn)生成mac地址與IP地址注冊碼的兩種方法,非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • 基于AForge實(shí)現(xiàn)C#攝像頭視頻錄制功能

    基于AForge實(shí)現(xiàn)C#攝像頭視頻錄制功能

    這篇文章主要為大家詳細(xì)介紹了基于AForge實(shí)現(xiàn)C#攝像頭視頻錄制功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C# WinForm調(diào)用Shell_NotifyIcon的示例代碼

    C# WinForm調(diào)用Shell_NotifyIcon的示例代碼

    這篇文章主要介紹了C# WinForm調(diào)用Shell_NotifyIcon的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C#中的高效IO庫System.IO.Pipelines

    C#中的高效IO庫System.IO.Pipelines

    這篇文章介紹了C#中的高效IO庫System.IO.Pipelines,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#滾動字幕的實(shí)現(xiàn)方法

    C#滾動字幕的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#滾動字幕的實(shí)現(xiàn)方法,主要講述了Graphics.DrawString函數(shù)的應(yīng)用方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#基于共享內(nèi)存實(shí)現(xiàn)跨進(jìn)程隊(duì)列

    C#基于共享內(nèi)存實(shí)現(xiàn)跨進(jìn)程隊(duì)列

    進(jìn)程通信一般情況下比較少用,但是也有一些使用場景,有些做視頻傳輸?shù)乃坪鯐枚噙M(jìn)程來實(shí)現(xiàn),還有在子進(jìn)程中調(diào)用特定的庫來避免內(nèi)存泄漏,筆者最近也遇到了需要使用多進(jìn)程的場景,本文介紹了C#基于共享內(nèi)存實(shí)現(xiàn)跨進(jìn)程隊(duì)列,需要的朋友可以參考下
    2024-07-07
  • WPF實(shí)現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    WPF實(shí)現(xiàn)類似ChatGPT逐字打印效果的示例代碼

    前一段時(shí)間ChatGPT類的應(yīng)用十分火爆,這類應(yīng)用在回答用戶的問題時(shí)逐字打印輸出,像極了真人打字回復(fù)消息,本文就來利用WPF模擬一下這種逐字打印的效果吧
    2023-08-08

最新評論

灵台县| 喜德县| 涞源县| 桂林市| 淮安市| 交口县| 靖江市| 浦北县| 乌什县| 大余县| 高要市| 峨眉山市| 兴仁县| 宁晋县| 长宁区| 双峰县| 云阳县| 巴中市| 大关县| 沅陵县| 沂南县| 诸城市| 福建省| 溧水县| 吕梁市| 巴楚县| 白玉县| 栖霞市| 鸡泽县| 潮州市| 通州市| 当雄县| 灵山县| 根河市| 通江县| 辉南县| 班玛县| 芒康县| 高淳县| 益阳市| 阜城县|