我能够创建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")
然后在.NET 4.0 WinForms项目中:
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptSourceFromFile("testScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
但是,我导入的IronPython DLL不包含所有标准模块,所以我必须这样做
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7.1\Lib')
步骤以便我可以运行接下来的4行。
有什么方法可以避免这种情况吗?
我将发布应用程序,我不想依赖每个人的机器上的文件路径相同!
答案 0 :(得分:5)
有一种扩展方法可以直接执行此操作:
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与您的应用程序一起包含在私人目录中,而不是依赖于它的安装,但这取决于您。
答案 1 :(得分:4)
如果在包含自己脚本的任何目录中包含Lib目录的副本,则可以使用IRONPYTHONPATH
环境变量来解决硬编码路径。
在运行脚本之前设置IRONPYTHONPATH
Environment.SetEnvironmentVariable("IRONPYTHONPATH", @"your_scripts\Lib");
ScriptEngine engine = Python.CreateEngine();
然后你应该能够从python脚本中删除路径操作。