Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 导入IronPython的嵌入式库_.net_Ironpython - Fatal编程技术网

.net 导入IronPython的嵌入式库

.net 导入IronPython的嵌入式库,.net,ironpython,.net,Ironpython,我已经通过NuGet将IronPython标准库添加到我的c#.net4项目中,后来获得了一些参考(IronPython、IronPython.Modules、IronPython.SQLite、IronPython.Wpf、Microsoft.Dynamic、Microsoft.Scripting等),并且“Lib”文件夹包含python模块。 现在,我试图在my file.py中导入“urllib”模块,但收到了ImportException(没有名为urllib的模块)。 如何使用urll

我已经通过NuGet将IronPython标准库添加到我的c#.net4项目中,后来获得了一些参考(IronPython、IronPython.Modules、IronPython.SQLite、IronPython.Wpf、Microsoft.Dynamic、Microsoft.Scripting等),并且“Lib”文件夹包含python模块。 现在,我试图在my file.py中导入“urllib”模块,但收到了ImportException(没有名为urllib的模块)。 如何使用urllib?我应该将Lib文件夹复制到项目输出目录还是执行其他操作

UPD:如果我将所需模块复制到项目输出目录,则程序在没有设置路径的情况下正常工作。 我可以使用“urllib”作为嵌入式资源还是在运行时导入它

谢谢

资料来源:

public static void Main(string[] args)
{
    var url = new Uri("www.microsoft.com");
    var r = PythonHelper.Get(url);
}

public static class PythonHelper
{
    public static string Get(Uri url)
    {
        var programPath = @"PySources\GetPage.py";
        var py = new Py(programPath);
        py.Scope.SetVariable("url", url.ToString());
        py.Source.Execute();
        var result = py.Scope.GetVariable<string>("result");
        return result;
    }

    private class Py
    {
        public ScriptScope Scope { get; private set; }
        public ScriptSource Source { get; private set; }

        public Py(string pyPath)
        {
            var pyEngine = Python.CreateEngine();
            Scope = pyEngine.CreateScope();
            Source = pyEngine.CreateScriptSourceFromFile(pyPath);
        }

        public void Execute()
        {
            Source.Execute(Scope);
        }
    }
}

GetPage.py:
#!/usr/bin/env python
# -*- coding: windows-1251 -*-
#coding=windows-1251
#encoding=windows-1251

import clr
clr.AddReference("IronPython")
clr.AddReference('IronPython.Modules')

import urllib

user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like     Gecko) Chrome/23.0.1271.95 Safari/537.11"
headers = { 'User-Agent' : user_agent }
result = urllib.urlopen(url, '' ,headers).read().decode('utf-8')
publicstaticvoidmain(字符串[]args)
{
var url=新Uri(“www.microsoft.com”);
var r=PythonHelper.Get(url);
}
公共静态类蟒蛇蛇
{
公共静态字符串获取(Uri url)
{
var programPath=@“PySources\GetPage.py”;
var py=新py(程序路径);
py.Scope.SetVariable(“url”,url.ToString());
py.Source.Execute();
var result=py.Scope.GetVariable(“结果”);
返回结果;
}
私家班
{
公共脚本作用域{get;private set;}
public ScriptSource源{get;private set;}
公共Py(字符串pyPath)
{
var pyEngine=Python.CreateEngine();
Scope=pyEngine.CreateScope();
Source=pyEngine.CreateScriptSourceFromFile(pyPath);
}
public void Execute()
{
来源、执行(范围);
}
}
}
GetPage.py:
#!/usr/bin/env python
#-*-编码:windows-1251-*-
#编码=windows-1251
#编码=windows-1251
导入clr
clr.AddReference(“IronPython”)
clr.AddReference('IronPython.Modules')
导入URL库
user_agent=“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.11(KHTML,如Gecko)Chrome/23.0.1271.95 Safari/537.11”
headers={'User-Agent':User\u-Agent}
结果=urllib.urlopen(url,,,headers).read().decode('utf-8'))

您可以将Lib文件夹复制到输出目录。如果希望它位于其他目录中,可以使用
ScriptEngine.setSearchPath()
完全控制库路径


另一种选择是将标准库放在.zip文件中,并使用
ScriptEngine.setSearchPath()
添加该库,这至少减少了要发送的文件数。

您的Libs文件夹必须位于(python)路径上。有关问题/答案,请参见或。上的“我如何使用CPython标准库?”一节似乎也暗示了这个方向。谢谢,Simon。我读过这些文章,但我认为IronPython标准库可以在没有安装Python的情况下使用。我的问题可以通过将Libs复制到应用程序bin目录来解决,我希望有更多的eays方法存在。有些东西,如bzip2或regex,是在IronPython.Modules.dll中实现的,但urllib(2)似乎不是这样。谢谢,杰夫!Zip是我的最佳解决方案。