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

问题描述 投票:0回答:4

使用 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安装所有东西的地方。 关于我需要做什么有什么建议吗? 谢谢。

c# python-requests ironpython
4个回答
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 脚本。 该脚本有“导入请求”并且它确实运行了 - 与之前一样,当尝试执行该脚本时,我会收到错误:

IronPython.Runtime.Exceptions.ImportException - 没有名为 requests 的模块 脚本现在运行 – yippy – 但是 – python 脚本在调用 requests.get() 方法时出现异常。 例外的是:

“不期望类型‘’”对象{string}

显然,从我的搜索来看,“不期望类型‘’”是与 requests 模块和 IronPython 不兼容的结果。 大约有 5 个众所周知的 Python 模块与 IronPython 不兼容,因此当它被调用时,它会返回一个字节块。

总之,据我所知,你不能从 c# 调用 python 请求 我希望这对某人有帮助,因为这让我度过了漫长痛苦的日子。


1
投票

我知道这是一篇旧帖子,但我发现了一些对我有用的东西,可以帮助解决未来有关此问题的问题。

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

这对我有用。


0
投票

我看到的是您正在使用 get 作为搜索路径,因此您加载了字符串集合,但缺少的是

engine.SetSearchPaths(searchPaths);
来让它工作。


0
投票

我已经成功使用了

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

到Python文件

确保您要导入的模块实际上在 IronPython 3.4\Lib 文件夹中可用

当您共享代码或分发应用程序时,这在没有此文件夹的计算机上当然会失败。

© www.soinside.com 2019 - 2024. All rights reserved.