Laden...

Python Skript/ Module in C# integrieren

Erstellt von Bügeleisen vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.129 Views
B
Bügeleisen Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren
Python Skript/ Module in C# integrieren

Hallo liebe Community,
ich muss in Zuge meines Studiums ein bestehendes Python Skript in C# implementieren und dort eine GUI erstellen. Ich bin noch relativ neu auf diesem Gebiet, weswegen ich etwas unbeholfen bin.
Durch Recherche bin ich auf Ironpython gekommen. Mein Plan ist es dort die ganzen .py Module zu implementieren, um dann so auf diese zugreifen zu können.
Wenn ich nun aber anfange, lässt sich mit dem Befehl "import" nichts importieren.
Es kommt immer die Fehlermeldung: unresolved import.
Wie löse ich das Problem? Ich möchte nämlich umgehen, dass ich jedes Modul nochmal extra in C# Programmieren muss, da das ein extremer Aufwand wäre.
Ich bin für Hinweise und Tipps jeder Art sehr dankbar.
Bitte entschuldigt, falls ich dieses Thema hier in das falsche Forum geposted habe.
Liebe Grüße

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

was für einen Impor? In C# nimmt man using 😕

Naja - grundlegend hast du mindestens 2 Möglichkeiten soweit ich mit einer schnellen Suche fnde:
a) Einfach per Shell ausführen (halte ich nicht unbedingt für verkehrt)
b) IronPython verwende - aber normal kommt da denke ich kein import (zumindest im C# vor)

Schaust dir vll mal am besten folgenden Thread an:
https://stackoverflow.com/questions/11779143/how-do-i-run-a-python-script-from-c

LG

PS: Wenn man dich zwingt ein externes Script auszuführen - würde ich persönlich wenn ich keine Rückmeldung für mein Programm brauche - immer per Shell bzw. Cmd ausführen. Ist schlicht sehr simpel auf diese Art.

B
Bügeleisen Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Vielen Dank für die schnelle Antwort,
ich lese mich in die Shell thematik mal ein und schau ob ich es so zum laufen bringe.
An sich soll mein Programm CAD Daten von Bauteilen auswerten. Dazu hab ich in Python ein Programm mit einer GUI die mir mit 10 Modulen dann diese Daten generiert.
Ich muss also später in meinem C# Projekt die Daten einlesen, sie diesen .py Modulen übergeben und dann die Ergebnisse wieder in C# darstellen. Um das nochmal etwas genauer zu formulieren. Die GUI in dem Python Projekt ist nämlich sehr unübersichtlich und soll mit C# optimiert werden.
Trifft der Lösungsansatz dann auch hierauf zu?
Liebe Grüße

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

naja - ein Shell-Aufruf startet im Endeffekt eine Art Kommandozeile für ein anderes Programm.

Wenn das Python-Programm einen entsprechenden CLI-Aufruf schafft - dann schafft das auch ein Shell-Aufruf.

Wenn das Ganze sich allerdings nur über die GUI anstoßen lässt - wird das mit der Shell nichts.

Um allerdings ehrlich zu sein: Das klingt nicht nach einer Aufgabe aus dem Studium - sondern eher nach einem Nebenjob mit lausiger Aufgabenstellung... Falls nicht würde ich eher erwarten, dass man dich auffordert alles in C# zu implementieren. Dann allerdings CAD in's Spiel zu bringen...

LG

309 Beiträge seit 2020
vor 3 Jahren

Man könnte das ganze auch über gRPC verbinden. Dann hätte man eine einheitliche Schnittstelle. Könnte aber sein dass das für euch etwas übertrieben ist, da ich denke dass dein Projekt was zusammengeschustertes für einen Arbeitsplatz ist 😁

B
Bügeleisen Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Ich muss das tatsächlich für die Uni machen, vielleicht drücke ich mich einfach schlecht aus.
Ich habe ein fertiges Programm in Python und möchte eben umgehen, dass ich alles nochmal von neu in C# schreiben muss. Deswegen wäre es praktisch, wenn ich die python Module irgendwie integrieren könnte. Das ist die Intension von dem Ganzen. Ich möchte nämlich in meinem Neuen Programm dann meine selbst geschriebenen Module mit den alten aus Python ergänzen um das ganze zu Optimieren.

Y
102 Beiträge seit 2005
vor 3 Jahren

Hallo,

Mittels IronPython kannst du dir in einem C# Programm eine Python ScriptEngine erstellen wo du dann entweder ein Python Skript, oder ein Python File von einem Ordner laden könntest.

Sowas könnte so aussehen:


using System;

using IronPython.Hosting;


namespace Test
{
    public class Program
    {
        public static void Main (string[] args)
        {
            //var engine = Python.CreateEngine();
            //var scope = engine.ExecuteFile("hello.py");

            var engine = Python.CreateEngine();
            engine.Execute("print \"Hello World from Python\"");
            
            Console.ReadKey();
        }
    }
}

Ob du damit ein Python 3.* ansprechen kannst, weiß ich allerdings nicht.

Ansonsten natürlich auch die Ausführung über CLI wie Taipi88 schon beschrieben hat.

M
368 Beiträge seit 2006
vor 3 Jahren

Evtl. könnte Pyjion auch einen Blick wert sein: Link zum Blogpost

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉