Запуск Python через Microsoft.Scripting & IronPython - PullRequest
4 голосов
/ 04 февраля 2012

Я могу создавать сценарии Python и динамически запускать их через Visual Studio / .NET 4.0, например:

# testScript.py file:
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7.1\Lib')
import os
os.environ['HTTP_PROXY'] = "127.0.0.1:8888"
import urllib2
response = urllib2.urlopen("http://www.google.com")

, затем в проекте WinNET Forms .NET 4.0:

ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptSourceFromFile("testScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);

Однако импортируемые DLL-библиотеки IronPython не содержат всех стандартных модулей, поэтому мне нужно выполнить шаг

import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7.1\Lib')

, чтобы я мог запустить следующие 4 строки.

Есть ли способ, которым я могу избежать этого?

Я собираюсь опубликовать приложение, и я не хочу полагаться, что путь к файлу будет одинаковым на всех компьютерах!

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Существует метод расширения, который позволяет вам сделать это напрямую:

ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptSourceFromFile("testScript.py");
ScriptScope scope = engine.CreateScope();

engine.SetSearchPaths(new string[] { "C:\\Program Files (x86)\\IronPython 2.7.1\\Lib" });
script.Execute(scope);

Вероятно, лучше включить stdlib с вашим приложением в личный каталог, чем полагаться на его установку, но это довы.

4 голосов
/ 05 февраля 2012

Если вы включите копию каталога Lib в любой каталог, содержащий ваши собственные сценарии, вы можете использовать переменную окружения IRONPYTHONPATH для обхода жестко заданного пути.

Установите IRONPYTHONPATH перед запуском сценариев,

Environment.SetEnvironmentVariable("IRONPYTHONPATH", @"your_scripts\Lib");
ScriptEngine engine = Python.CreateEngine();

, и тогда вы сможете удалить манипуляции с путями из сценариев Python.

...