C#,IronPython错误:IronPython.Runtime.Exceptions.ImportException-没有名为requests的模块。

3

使用VS 2019安装了NuGet包IronPython v2.7.11和DynamicLanguageRuntime v1.3.0,正在尝试运行Python脚本。在脚本中添加了import后,出现了问题:

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。有什么建议吗?谢谢。
3个回答

1

问题在于IronPython和Python之间的不兼容性,我越深入挖掘,就越发现更多的问题。

  1. 没有任何文档记录,但我找到了来自IronPython团队的某个人指出,IronPython 2.7.11“必须”与Python 2.7交互。嗯,2.7很久以前就已经终止生命周期了,你甚至无法从Python网站下载它。

  2. 没有任何文档记录,但IronPython 3.4(刚刚发布)“必须”与Python 3.4交互,是的,3.4很久以前就已经终止生命周期了,你甚至无法从Python网站下载它。我觉得这很奇怪,一个新版本的东西竟然基于过时的东西。

  3. 我能够从nuget获取Python 2.7.n,在设置和配置好所有新路径后,我能够让c#通过ironpython执行Python脚本。脚本中有“import requests”,并且它确实运行了——而以前尝试执行脚本时,我会收到错误:

IronPython.Runtime.Exceptions.ImportException - 没有名为requests的模块 脚本现在可以运行了,但是当调用requests.get()方法时,Python脚本会出现异常。异常信息如下:
“not expecting type '<type 'bytes'>'” object {string}
从我的搜索结果来看,“not expecting type '<type 'bytes'>'”是由于requests模块与IronPython不兼容导致的。已知有大约5个常用的Python模块与IronPython不兼容,因此当它被调用时会返回一堆字节。
总之,据我所知,你不能从C#中调用Python requests。 希望这能帮助某些人,因为这让我付出了几天漫长而痛苦的代价。

这正是我讨厌Python的原因;为什么有这么多解决方案可以回到旧版本的Python?他们至少能试着保持向后兼容性吗……哪怕只是一点点? - undefined

0
我看到你在使用get来获取搜索路径,这样你可以加载字符串集合,但是缺少的是engine.SetSearchPaths(searchPaths);来使其正常工作。

0

我知道这是一个旧帖子,但我找到了一些对我有用的东西,可以帮助未来关于这个问题的提问。

我从NuGet Package中安装了 `IronPython.StdLib`。 我使用我的IDE(PyCharm)下载所需的库(`Tkinter`),然后将该文件夹添加到我的C#项目的 `Lib` 文件夹中。 我添加了以下代码:
var libs = new[] {@"{PATH OF YOUR PROJECT}\Lib"};
engine.SetSearchPaths(libs);

这对我来说是可行的。


我完全不理解第二行。添加什么文件夹?而且tkinter与这三个导入有什么关系? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接