使用 VS 2019,我安装了 nuget 包 IronPython v2.7.11 和 DynamicLanguageRuntime v1.3.0,并尝试运行 python 脚本。 它运行良好,直到我将导入添加到脚本中:
import requests, time, socket
import random
这是 C#:
static void Main(string[] args)
{
DateTime start = DateTime.Now;
ScriptEngine engine = Python.CreateEngine();
var searchPaths = engine.GetSearchPaths();
// Path to where everything is installed for this Python enviroment
searchPaths.Add(@"C:\Users\George\.conda\envs\spenv2");
int url_id = 1701;
string url = "https://www.yellowpages.com/search?search_terms=Health&geo_location_terms=Aliso+Viejo%2C+CA";
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(@"D:\Apps\Data Destinations\Scraping\ScrapeProjects\Job1.v4_For_IronPython_CSharp\ScrapeUrlPages.py", scope);
dynamic testFunction = scope.GetVariable("scrape_all_pages_for_this_search");
dynamic result = testFunction(url_id, url);
Console.WriteLine(result);
}
我发现了一些关于类似问题的帖子,其中大多数的解决方案是添加搜索路径。 我做了什么:
searchPaths.Add(@"C:\Users\George\.conda\envs\spenv2");
这是使用Python环境spendv2安装所有东西的地方。 关于我需要做什么有什么建议吗? 谢谢。
问题是 IronPython 和 Python 之间的不兼容,我对此研究得越深入,发现的问题就越多。
没有任何地方记录,但我发现 IronPython 团队中的某人指出 IronPython 2.7.11“必须”与 Python 2.7 交互。 嗯。 2.7 很久以前就已经停产了,你甚至无法从 Python 网站下载它。
在我能找到的任何地方都没有记录,但 IronPython 3.4(刚刚发布)“必须”与 Python 3.4 交互,是的,3.4 很久以前就已经停产了,你甚至无法从 Python 网站下载它。 我觉得奇怪的是,新版本的某些东西会基于过时的东西。
我能够从 nuget 获取 Python 2.7.n,在完成所有设置和配置并设置所有新路径后,我能够让 c# 通过ironpython 执行 python 脚本。 该脚本有“导入请求”并且它确实运行了 - 与之前一样,当尝试执行该脚本时,我会收到错误:
IronPython.Runtime.Exceptions.ImportException - 没有名为 requests 的模块 脚本现在运行 – yippy – 但是 – python 脚本在调用 requests.get() 方法时出现异常。 例外的是:
“不期望类型‘
显然,从我的搜索来看,“不期望类型‘
总之,据我所知,你不能从 c# 调用 python 请求 我希望这对某人有帮助,因为这让我度过了漫长痛苦的日子。
我知道这是一篇旧帖子,但我发现了一些对我有用的东西,可以帮助解决未来有关此问题的问题。
IronPython.StdLib
。Tkinter
),然后将该文件夹添加到我的 C# 项目中的 Lib
文件夹中。var libs = new[] {@"{PATH OF YOUR PROJECT}\Lib"};
engine.SetSearchPaths(libs);
这对我有用。
我看到的是您正在使用 get 作为搜索路径,因此您加载了字符串集合,但缺少的是
engine.SetSearchPaths(searchPaths);
来让它工作。
我已经成功使用了
sys.path.append(r'C:\Program Files\IronPython 3.4\Lib')
import random
到Python文件
确保您要导入的模块实际上在 IronPython 3.4\Lib 文件夹中可用
当您共享代码或分发应用程序时,这在没有此文件夹的计算机上当然会失败。