[討論] 在 .NET 使用 Pythonnet 的應用情境

作者: fundamental (呵呵呵呵呵)   2021-08-12 23:18:12
板上各位大大好
最近工作有接觸到 Pythonnet
想請教一下有使用過 Pythonnet 大大的經驗
我們部門軟體的核心架構是使用.NET ( UI, Custom Class, Custom Collection... )
為了使程式外部化,將部分功能的模組寫在 Python
透過 Pythonnet 就可以在 .NET 動態執行 Python Script
Python 的好處是有很多現成的 Package 可以縮短軟體開發的時間
但 Python 與 .NET 是兩種不同的語言,資料結構當然也不同
在這種使用情境下寫的 Python Code 傳入的變數若是定義在 .NET 的物件
則必須在 Python method 裡操作 .NET 物件的 property , method
要怎麼使用 .NET 物件還得回去看 C# 寫的 Source Code
且這種方式很難 Debug Python Code
因為 App 是 .NET,故 IDE 只能 Debug .NET 的部分
若 Python Script 寫的很複雜或呼叫很多層,要 Debug Python 就只能到處加 Print
而 Python Script 執行結束後,所有變數都會消失
若要 Keep 住某些 Python 變數的狀態或資料,必須要先轉成 .NET 物件並存到 .NET
Collection
其他 Python Script 要使用已保留資料,就必須再去從 .NET Collection 把資料拿出來
因為高度相依 .NET 建立的資料結構及物件,若沒有使用我們部門的 .NET 核心,這些
Python 模組不能單獨使用
寫出來的 Python Code 感覺變得很奇怪,不像是 Python
雖然有問過部門前輩現行做法的奇怪之處,但得到的回應是 習慣就好了 (疑?
因此想問看看板上大大在 .NET 使用 Pythonnet 是在什麼情境會需要?
這種程式開發方法會是主流嗎? 謝謝~
作者: devilkool (對貓毛過敏的貓控)   2021-08-13 01:35:00
我不懂為什麼要這麼麻煩......
作者: orangeterry (bghnbytnytn)   2021-08-13 02:29:00
PTVS可以同時debug python和c#
作者: laputaflutin (很恐怖,不要問)   2021-08-13 05:27:00
為什麼不把.net保成一個服務讓外部python直接call?
作者: jinmin88 (晝伏夜出)   2021-08-13 09:42:00
為什麼不用json格式來做序列化跟反序列化來交換就好?
作者: herrowui (帝虎改)   2021-08-13 10:29:00
其中一邊做成webapi給另一邊呼叫應該比較容易吧!
作者: Murasaki0110 (麥當勞歡樂送)   2021-08-13 10:30:00
json protobuf這些去decouple
作者: Phenomenon (Kuma)   2021-08-13 11:03:00
未看先猜最原本的 code 就這樣寫,後來加功能的就複製一樣的模式繼續寫,最後就大到改不動了。
作者: fundamental (呵呵呵呵呵)   2021-08-13 23:33:00
謝謝 我找時間試一下^^@orangeterry@laputaflutin 有些是包成 dll 讓 python call 但UI 在 .NET做完 Python 某些行為還得把資料拿回 UI@jinmin88 變數可以存沒問題,但兩種語言型別不同的問題會建議怎麼處理呢?@Murasaki0110 非常感謝,認識了一個厲害的東西!@Phenomenon 也許是吧 我的資資歷尚淺不曉得緣由
作者: xoy232 (鬼島希特勒)   2021-08-14 06:10:00
用pipe會不會比較好

Links booklink

Contact Us: admin [ a t ] ucptt.com