Запустите скрипт Python с импортом в C #

1

Допустим, у меня есть этот супер-скрипт Python, который должен запускать cv2 в будущем...

import cv2

def method():
    print("Hello")
    parameter = "l"
    return "OOPS"

method()

И в С# что-то вроде этого.

Process p = new Process();
    p.StartInfo = new ProcessStartInfo(@"D:\Programming\Python\python.exe", fileName)
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    p.Start();
    string output = p.StandardOutput.ReadToEnd();

Но это вызывает ошибку "ImportError: DLL load failed". Хорошо, кажется, что он ищет неправильные каталоги для библиотек, так как у меня около 4 интерпретаторов Python. Следит за быстрым исправлением.

string path = @"D:\Programming\Python;" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
            Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Process);
            Environment.SetEnvironmentVariable("PYTHONHOME", @"D:\Programming\Python;", EnvironmentVariableTarget.Process);
            Environment.SetEnvironmentVariable("PYTHONPATH ", @"D:\Programming\Python\Lib; D:\Programming\Python\DLLs", EnvironmentVariableTarget.Process);
            string fileName = @"..\Python\hello.py";

            Process p = new Process();
            p.StartInfo = new ProcessStartInfo(@"D:\Programming\Python\python.exe", fileName)
            {
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            p.Start();
            string output = p.StandardOutput.ReadToEnd();

Импортировать DLL теперь исправлено, но появилась еще одна дикая ошибка,
Fatal Python error: initfsencoding: невозможно загрузить кодек файловой системы
ModuleNotFoundError: Нет модуля с именем 'encodings'

На данный момент я потерян и не знаю, что мне делать дальше... любые идеи приветствуются, у меня хороший день.

UPDATE: Удалены все другие интерпретаторы python, кроме anaconda и одного виртуального env, и попробовали следующее:

  1. Запустите скрипт Python из кода Visual Studio с данным интерпретатором, отлично работает.
  2. Выполните его также из подсказки Anaconda.
  3. Добавлено вручную для переменных системной среды
    PATH = D:\Программирование\Python
    PYTHONHOME = D:\Programming\Python PYTHONPATH = D:\Programming\Python\Lib; D:\Programming\Python\DLL; D:\Programming\Python\Lib\site-packages

Так что теперь я могу успешно назвать "python" из cmd, например, и проверить версию, виртуальный env - python 3.6, и это правильный вариант. Python правильный
Но это то, где начинается все самое интересное, вы ожидаете "привет" в своей консоли... воплощение в ад

  • 0
    Посмотрите на этот ответ: stackoverflow.com/a/15331222/546000 ; это может помочь. Вы на правильном пути, но единственное, что я вижу в этом ответе, это явное включение / site-packages / в переменную PYTHONPATH .
  • 0
    Вы используете компьютер с Windows? Если это так, вы можете запустить powershell, и из powershell запустите скрипт python stackoverflow.com/a/53324757/7927820, вам нужно добавить python xxx.py в process.StartInfo.Arguments
Показать ещё 3 комментария
Теги:

1 ответ

0

Не нашел правильного ответа на эту проблему, но обнаружил обходное решение в p2exe или pyinstaller.
Просто вызовите pyinstaller.py --onefile xx.py и создайте exe файл и передайте это в процесс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню