Как интегрировать Python в Zenno с помощью C#?

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
Здравствуйте, сообщество ZennoPoster,

В настоящее время я сталкиваюсь с проблемой интеграции IronPython в мой проект ZennoPoster. Несмотря на установку сборок IronPython.dll и IronPython.Modules.dll, я столкнулся с постоянной ошибкой, которая мешает моему прогрессу.

Сообщение об ошибке, которое я получаю при компиляции общего кода, следующее:

Ошибка компиляции общего кода "CS0234" "Тип или пространство имен 'Hosting' не существует в пространстве имен 'IronPython' (вам не хватает ссылки на сборку?)". [Строка: 29; Колонка: 18]

Эта ошибка возникает даже после того, как я убедился, что директива using IronPython.Hosting; правильно размещена в моем общем коде и требуемые DLL включены в мой проект.

Вот фрагмент кода из раздела общего кода для контекста:


using IronPython;
using IronPython.Hosting;


Я предпринял несколько шагов по устранению неполадок, таких как проверка установки пакета NuGet, проверка ссылок на сборку и даже перезагрузка ZennoPoster, но проблема так и не решена.

Может ли кто-нибудь помочь мне с правильным подходом к ссылке на IronPython в проекте ZennoPoster? Любой совет или руководство по этому вопросу будут очень ценны.

Спасибо за ваше время и помощь.

С наилучшими пожеланиями,
 

soprano

Client
Регистрация
25.08.2011
Сообщения
799
Благодарностей
843
Баллы
93
Хороший вопрос. Достоин большой статьи. Тоже интересно.
 
  • Спасибо
Реакции: Pierre Paul Jacques

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 189
Благодарностей
825
Баллы
113
При попытке добавить dll в GAC ничего не происходит, они не добавляются, хотя версия подходящая - .net framework 4.6.2. Т.е. проблема похоже именно в zennoposter'е
 
  • Спасибо
Реакции: Pierre Paul Jacques

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 659
Благодарностей
1 330
Баллы
113
Скажу кратко, ZennoPoster на данный момент в развитии застрял на .NET Framework, а многие библиотеки уже переписаны, либо переписывают на .NET 8.0
При использовании современных библиотек .NET, по незнанию пытаются подружить ZennoPoster который на .NET Framework, по этому нечего не работает, и сыпет ошибками в лог. Несовместимость одного с другим. Ждите ZennoPoster 8.
 
Последнее редактирование:
  • Спасибо
Реакции: Pierre Paul Jacques

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
В первую очередь хочу выразить благодарность всем, кто ответил на мои предыдущие вопросы о интеграции Python в ZennoPoster. Ваши комментарии были невероятно полезны!

У меня все еще возникают проблемы с использованием IronPython. Похоже, существуют проблемы совместимости, которые не позволяют ему оптимально функционировать с ZennoPoster. Меня интересует, есть ли альтернативные библиотеки Python или методы, которые вы могли бы порекомендовать для интеграции в проект ZennoPoster?

Буду очень благодарен за любые предложения или рекомендации о том, как лучше использовать Python в ZennoPoster, особенно альтернативы IronPython. Спасибо вам большое за ваше время и помощь!

С наилучшими пожеланиями,


ниже приведен первый код, который я создал, чтобы увидеть, как код Python работает с Zeno, но я напоминаю вам, что я не являюсь разработчиком-программистом и что я открываю все это и что я использую искусственный интеллект для генерации закодированного кода; так что, возможно, всегда есть лучшие способы действовать, поэтому еще раз большое спасибо за вашу помощь, которая ценна, и потому, что, к сожалению, информация о Zeno и сообществе на других языках очень ограничена.
C#:
// Path to the Python interpreter on your system
string pythonPath = @"C:\Program Files\Python311\python.exe";

// Python code for a simple calculation
string pythonCode = @"
def calculate(x, y):
  return x + y

result = calculate(5, 7)
print('The result of the calculation is:', result)
";

// Create a temporary file path
string tempScriptPath = Path.Combine(Path.GetTempPath(), "tempPythonScript.py");

try
{
    // Write the code to the temporary file
    File.WriteAllText(tempScriptPath, pythonCode);

    // Set up the execution of the Python process
    System.Diagnostics.ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo
    {
        FileName = pythonPath,
        Arguments = $"\"{tempScriptPath}\"",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    // Start the process and read the standard output
    using (System.Diagnostics.Process process = System.Diagnostics.Process.Start(start))
    {
        using (StreamReader reader = process.StandardOutput)
        {
            string result = reader.ReadToEnd();
            project.SendToLog("Python script output: " + result.Trim(), ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, false, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Blue);
        }
    }

    // Delete the temporary file after execution
    if (File.Exists(tempScriptPath))
    {
        File.Delete(tempScriptPath);
    }
}
catch (Exception ex)
{
    project.SendToLog("Error executing the Python script: " + ex.Message, ZennoLab.InterfacesLibrary.Enums.Log.LogType.Error, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Red);
    // If the error is serious, stop the process
    throw new Exception("Exception triggered following an error.");
}
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
917
Благодарностей
375
Баллы
63
я не являюсь разработчиком-программистом и что я открываю все это и что я использую искусственный интеллект для генерации закодированного кода;
зачем генеривать код через ИИ на питоне, для интеграции в C# , не являясь программистом питона ?
не проще сразу попросить ИИ генерировать код на С#, который является родным для Зеннопостера ?
 
  • Спасибо
Реакции: Pierre Paul Jacques

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 436
Баллы
113
Подождите еще немного ЗП8 будет с коробки поддерживать Пайтон, Паскаль и Асемблер
 
  • Спасибо
Реакции: Pierre Paul Jacques

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 436
Баллы
113
Во многих проектах юзаю пайтон - расставляем значение переменных в код, код сохраняем в .py файл и запускаем в СМД.
Хз зачем все эти пируеты
 
  • Спасибо
Реакции: Pierre Paul Jacques

Ахилес

Client
Регистрация
11.11.2020
Сообщения
917
Благодарностей
375
Баллы
63
Во многих проектах юзаю пайтон - расставляем значение переменных в код, код сохраняем в .py файл и запускаем в СМД.
Хз зачем все эти пируеты
вот тоже такой же вопрос... через СМД же всегда питон запускали... а эта библа делает тоже самое, только с головной болью... да еще и не совместима с зенкой :bn:
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
Благодарю за вашу ценное предложение! Действительно, вы подняли отличный вопрос о генерации кода на C# напрямую, что является родным для ZennoPoster. Как новичок, не являющийся разработчиком, я изучаю все доступные инструменты и методы, чтобы понять, что технически выполнимо и что лучше всего подходит моим нуждам.

В некоторых случаях у меня есть доступ к коду на Python, который уже разработан и доступен в интернете, поэтому логично использовать его. Тем временем, в других сценариях, я мог бы потенциально адаптировать этот код Python в C#. Я все еще учусь и пытаюсь выяснить лучший подход в зависимости от ситуации, будь то использование существующих решений на Python или их адаптация в C#. Идея состоит в том, чтобы максимально использовать доступные онлайн ресурсы, используя их так, как они есть, или преобразуя их в нужный мне формат.

Еще раз спасибо за ваш совет! Это дало мне много пищи для размышлений, поскольку я продолжаю учиться и расти в своем пути программирования.
 

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
Its works with IronPython with this simple code :

C#:
try
{
    // Create a Python engine from the IronPython hosting
    ScriptEngine engine = Python.CreateEngine();

    // Perform a simple Python operation
    string pythonScript = "x = 1 + 3";
    ScriptSource source = engine.CreateScriptSourceFromString(pythonScript, Microsoft.Scripting.SourceCodeKind.Statements);
    ScriptScope scope = engine.CreateScope();
    source.Execute(scope);
    
    // Retrieve the value of x from the Python script
    dynamic result = scope.GetVariable("x");

    // Log the result using traditional ZennoPoster logging methods
    project.SendInfoToLog($"Result from Python script: {result}", true);
}
catch (Exception ex)
{
    // Log any errors using traditional ZennoPoster error logging
    project.SendInfoToLog($"Error executing Python script: {ex.Message}", true);
}
 

southside

Client
Регистрация
20.04.2019
Сообщения
200
Благодарностей
251
Баллы
63
А не проще как-то так делать - https://zenno.club/discussion/threads/zapusk-pyton-komand.105835/post-701155 ? (наверное, можно как-то проще / лучше тот код сделать, но для начала сойдёт)
Тоже самое как выше советовали. В аргументы к запуску нужные переменные вставить, да и всё, в общем-то. Ну а в некоторых случаях ещё проще api поднять на том же fastapi или прочих фраймворках
 
Последнее редактирование:
  • Спасибо
Реакции: Pierre Paul Jacques

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
Огромное спасибо за вашу ссылку! Я действительно не знал об этом методе, потому что, как вы знаете, я новичок и к сожалению, информации на моем родном языке о Zenno и интеграции Python совсем немного.

Чем больше у нас возможностей что-то испробовать, тем лучше мы можем выбрать наиболее подходящее решение! В моем случае мне нравится, когда код максимально сосредоточен в блоке кода C#, а не в графическом интерфейсе, чтобы я мог легко его перерабатывать и адаптировать с помощью искусственного интеллекта. Вот почему я сейчас стремлюсь преобразовать всё, что делаю, используя блоки Zenno, добавляя при этом некоторые условия модификации или более ясные журналы .

Ещё раз спасибо за вашу помощь и советы, они бесценны, особенно учитывая, что информация о Zenno в других языках очень ограничена.
 

goldbase1

Client
Регистрация
19.12.2020
Сообщения
86
Благодарностей
13
Баллы
8

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)