Как добавить модули в Iron Python?
Я пытался выполнить следующий код Python (graphcreater.py) с помощью C# Visual Studio. Я добавил IronPyton 2.7.7 и IronPython.StdLib 2.7.7 через менеджер пакетов NuGet.
После запуска программы выдается исключение, в котором говорится, что
Нет модуля с именем mpl_toolkits.mplot3d
Мне нужно выяснить, как правильно импортировать модуль mpl_toolkits в коде Python (graphcreater.py).
ПРИМЕЧАНИЕ: graphcreater.py работает, когда выполняется только с использованием Python.
Код Python (graphcreater.py):
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
fig = plt.figure()
xs = np.array([ 0,1,2,2,1,1,0]);
ys = np.array([ 0,0,0,2,2,3,3]);
zs = np.array([3 ,0, -1, 6, 2, 1,4]);
ax=fig.add_subplot(1,1,1, projection='3d')
ax.grid(True)
ax.plot_trisurf(xs, ys, zs,cmap=cm.coolwarm,linewidth=0.2, antialiased=True)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
# Add a color bar which maps values to colors
# fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
Код C#:
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
namespace graphCreator
{
class Program
{
static void Main(string[] args)
{
ScriptEngine engine = Python.CreateEngine();
engine.ExecuteFile(@"graphcreater.py");
}
}
}
1 ответ
Я думаю, что у меня есть решение после прочтения: http://www.needfulsoftware.com/IronPython/IronPythonCS2
Мы можем установить пути поиска для библиотек, которые мы хотим использовать. Например, я изменил свой путь поиска следующим образом:
ICollection<string> searchPaths = engine.GetSearchPaths();
searchPaths.Add("J:\\Python\\test2\\venv\\Lib");
searchPaths.Add("J:\\Python\\test2\\venv\\Lib\\site-packages");
engine.SetSearchPaths(searchPaths);
Я установил пакет NetworkX в моем обычном python venv. я звонил import networkx
из моей встроенной консоли IronPython в C# и получил следующую ошибку:
>>> import networkx
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "J:\Python\test2\venv\Lib\site-packages\networkx\__init__.py", line 128, in <module>
File "J:\Python\test2\venv\Lib\site-packages\networkx\drawing\__init__.py", line 6, in <module>
File "J:\Python\test2\venv\Lib\site-packages\networkx\drawing\nx_pydot.py", line 27, in <module>
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\__init__.py", line 77, in <module>
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\_vendor\packaging\requirements.py", line 9, in <module>
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\extern\__init__.py", line 43, in load_module
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\_vendor\pyparsing.py", line 4715, in <module>
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\_vendor\pyparsing.py", line 1261, in setParseAction
File "J:\Python\test2\venv\Lib\site-packages\pkg_resources\_vendor\pyparsing.py", line 1043, in _trim_arity
IndexError: index out of range: -1
Итак, это не полный успех, но это показывает, что теперь я могу импортировать пакеты, если они установлены.
Проблема в том, что не все пакеты совместимы с IronPython, как указано на их веб-сайте. Поэтому лучшее решение, которое я могу предложить, - это установить IronPython (ipy.exe) в папку, а затем установить нужные поддерживаемые пакеты, а затем обновить путь поиска в C# до site-packages
из ipy, который вы установили.