Sympy не видит IronPython 2.7.5

284
26 марта 2017, 01:43

Нужно запустить код питона в c#, а именно использовать библиотеку sympy, нашел топик, который отвечает на мой вопрос http://stackoverflow.com/questions/6721736/c-sharp-library-for-algebra-simplification-and-solving . В ответе, который дал Damon Achey 2-ым пунктом идет установка sympy.exe, но в этом вся и проблема, при попытке установки sympy дает ошибку

no python installation found in the registry

Немного поискав в гугле решение данной проблемы нашел несколько ответов :

  1. Питон не в ту ветку регистра записал данные (записал в HKLM\SOFTWARE\ , а нужно в HKLM\SOFTWARE\Wow6432Node\), у меня с этим проблем нет, после установки папка есть в HKLM\SOFTWARE\Wow6432Node\.
  2. Питон записал в ветку HKEY_CURRENT_USER (тобишь, только для данного юзера), а нужно HKEY_LOCAL_MACHINE, как вы уже догадались, у меня записано в HKEY_LOCAL_MACHINE , хотя и в HKEY_CURRENT_USER есть запись

Можете помочь решить проблему ?

Answer 1

Попытался воспроизвести и получил тот же самый результат. Детально разбираться в чем причина не стал, возможно у вас система другой архитектуры.

Поэтому поступил "по старинке":

  1. Установил IronPython
  2. Собрал из исходников mpmath
  3. Собрал из исходников SymPy

Запустил пример:

  1. Создал проект консольного приложения
  2. Добавил NuGet - пакет: Install-Package IronPython
  3. Перевел пример из вопроса на SO по вашей ссылке на F#
open IronPython.Hosting
let options = ["FullFrames", true :> obj] |> dict
let engine = Python.CreateEngine options
let paths = engine.GetSearchPaths()
paths.Add @"C:\Program Files (x86)\IronPython 2.7\Lib"
engine.SetSearchPaths paths
// expression to simplify
let expr = "0 + 1 * 1 * (x - 2) / (1 - 2) * (x - 3) / (1 - 3) * (x - 4) / (1 - 4)";
let scope = engine.CreateScope()
let script = engine.CreateScriptSourceFromString(@"
import codecs
def my_unicode_escape_decode(x):
    return x
codecs.unicode_escape_decode = my_unicode_escape_decode
from sympy import *
import clr
from System import String
expr = simplify('" + expr + @"')
result = clr.Convert(expr, String)
")
script.Execute scope |> ignore
scope.GetVariable "result" |> printfn "%A"

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

Ваша коллекция paths может отличатся - для удобства я скопировал установленные библиотеки туда, где находится IronPython.

Если будут падать какие-то исключения - пингуйте меня в чате

READ ALSO
Вставить пробел через каждую букву

Вставить пробел через каждую букву

Есть строка, например, string stroka="string"; мне надо вставить пробел через букву то есть на экране будет так: s t r i n g

279
сортировка по ORDERи изменения мест по ORDER в БД

сортировка по ORDERи изменения мест по ORDER в БД

привет всем! работаю над мини CMSс объектами у которых есть параметер ORDER(int)допустим у меня есть 10 объектов и у каждого свой ORDER от 1 - 10

241
Кодировка в c Sharp

Кодировка в c Sharp

Не знаю как правильно обозвать данный вопрос) Не пинайте) Задача стоит получить коды смайлов vkНо c# упорно съедает сами коды, превращая их в квардраты

264
c# Обработка нажатие клавиш

c# Обработка нажатие клавиш

Стоит задача на с#Имеется чекбокс , при выбраном чекбоксе

336