Допустим, у меня есть этот супер-скрипт 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, и попробовали следующее:
Так что теперь я могу успешно назвать "python" из cmd, например, и проверить версию, виртуальный env - python 3.6, и это правильный вариант. Python правильный
Но это то, где начинается все самое интересное, вы ожидаете "привет" в своей консоли... воплощение в ад
Не нашел правильного ответа на эту проблему, но обнаружил обходное решение в p2exe или pyinstaller.
Просто вызовите pyinstaller.py --onefile xx.py и создайте exe файл и передайте это в процесс.
PYTHONPATH
.python xxx.py
вprocess.StartInfo.Arguments