#c# #.net #python
#c# #.net #python
Вопрос:
Я работаю над проектом, в котором мне нужно иметь возможность запускать функцию python, которая зависит от SciPy / NumPy. Поскольку это дополнение к уже выполняемому проекту, использование IronPython было бы невозможно.
Дополнительная информация:
- Python.NET казался подходящим вариантом, но я не смог получить возвращаемое значение из RunString() (оно возвращало бы только NULL).
- Необходима передача аргументов и получение возвращаемого значения (кортеж).
- Функция находится в статистическом пакете, который был создан группой поддержки для команды, поэтому модификация этого также была бы невозможна.
Я в полной растерянности, не зная, что делать. Приветствуются любые подсказки в правильном направлении. Спасибо за любую помощь, которую вы можете оказать!
Я понимаю, что это может быть довольно расплывчато, но я не могу предоставить явные детали проекта. Если нужны какие-либо разъяснения, пожалуйста, дайте мне знать, и я сделаю все, что в моих силах!
Ответ №1:
Я думаю, вы могли бы написать DLL, которая использует CPython API для предоставления функции, а затем вызвать ее на C #? Можно встроить интерпретатор Python; хотя я никогда не делал этого лично, я думаю, это было бы полезно:http://docs.python.org/extending/embedding.html
Комментарии:
1. Спасибо! Я изучу это.
Ответ №2:
Должен ли он быть переносимым за пределы Windows? Если нет, возможно, вы можете встроить интерпретатор CPython в C / CLI, обернуть это в приятный .Net-интерфейс и использовать полученный код из C #. Никогда не пробовал это, поэтому я не знаю, сработает ли это.
Независимо от того, пойдете ли вы по этому маршруту или по маршруту «написать собственную DLL», вероятно, будет проще внедрить python с помощью Boost.Python, хотя я не уверен, что ваш код-оболочка будет достаточно большим, чтобы сделать все это (компиляция Boost behemoth, обучение Boost.Python, убедившись, что он работает с C / CLR, увеличив размер вашего целевого файла) стоит того.
Ответ №3:
IronPython, использующий DLR, может быть правильным решением. Имейте в виду, что это не самый быстрый способ, но, похоже, к нему стоит стремиться, если вы собираетесь делать это часто. Еще одна полезная ссылка
Комментарии:
1. Спасибо! Я немного почитаю и посмотрю, сработает ли это для меня.
Ответ №4:
Проект ironclad был запущен, чтобы разрешить использование расширений CPython из IronPython, особенно SciPy / NumPy, кажется. Я не знаю, насколько это удобно (и насколько активно оно все еще разрабатывается)