Импорт внешнего модуля в IronPython

В настоящее время я работаю над приложением, написанным на С#, в которое я встраиваю IronPython. У меня вообще нет проблем с этим, но есть одна вещь, с которой я не знаю, как бороться.

Я хочу импортировать внешний модуль в script. Как я могу это сделать? Простой import ext_lib не работает. Должен ли я добавить путь к lib на sys.path? Возможно, можно скопировать файл lib.py в каталог приложения и импортировать оттуда?

EDIT: Я, наконец, выбрал другое решение - скомпилировал мой script с помощью py2exe, и я просто запускаю его из основного приложения С# с помощью Process (без использования IronPython).

В любом случае, спасибо за помощь;)

Ответ 1

Перед компиляцией script с PythonEngine я добавлю каталог script в путь поиска двигателя. Это то, что я делаю в коде С#:

string dir = Path.GetDirectoryName(scriptPath);                       
ICollection<string> paths = engine.GetSearchPaths();

if (!String.IsNullOrWhitespace(dir))
{
    paths.Add(dir);
}
else
{
    paths.Add(Environment.CurrentDirectory);
}
engine.SetSearchPaths(paths);

Теперь, если библиотеки находятся в каталоге, в котором находятся исполняемые вами сценарии, они будут импортированы.

Ответ 2

Скорее всего, ваш путь настроен неправильно. Из часто задаваемые вопросы IronPython:

Как использовать стандартные библиотеки CPython?

Чтобы сообщить IronPython, где находится стандартная библиотека Python, вы можете добавить каталог lib для CPython в путь IronPython. Чтобы сделать это, поместите следующий код в файл "site.py" в IronPython (замените c:\python24\lib вашим фактическим путем на каталог библиотеки CPython):

import sys
sys.path.append(r"c:\python24\lib")

Кроме того, если вы получаете ошибки импорта в CPython для script, которые у вас есть на вашем компьютере, в 99% случаев это также проблема с этим.