我正试图让pythonnet在运行在Linux上的.Net Core应用程序中工作。
我在.Net Core项目中引用了 Python.Runtime.dll (从nuget获得)。
我的代码是:
using System;
using Python.Runtime;
namespace pythonnet_w
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start");
using (**Py.GIL()**) {
// blabla
}
Console.WriteLine("End");
}
}
}
我收到此运行时错误:
Unhandled Exception: System.MissingMethodException: Method not found: 'System.Reflection.Emit.AssemblyBuilder
System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName, System.Reflection.Emit.AssemblyBuilderAccess)'.
at Python.Runtime.CodeGenerator..ctor()
at Python.Runtime.DelegateManager..ctor()
at Python.Runtime.PythonEngine.Initialize(IEnumerable`1 args, Boolean setSysArgv)
at Python.Runtime.PythonEngine.Initialize(Boolean setSysArgv)
at Python.Runtime.PythonEngine.Initialize()
at Python.Runtime.Py.GIL()
at pythonnet_w.Program.Main(String[] args) in D:\Development\~.Net libraries (3.part)\phytonnet\.Net Core test (phytonnet)\c#\pythonnet_test\Program.cs:line 10
/usr/sbin/pythonnet_w: line 5: 19487 Aborted dotnet "/usr/share/pythonnet_wit/pythonnet_w.dll"
试图在这些线程中找到解决方案,但没有任何运气:
更新:
我试图在Visual Studio中打开\ pythonnet-master \ src \ runtime ** Python.Runtime.csproj **,以查看是否可以将其编译为.Net或.Core,但是我只能编译为.Net框架。 我发现本文“ How to port from .net framework to .net standard” 那是我要做的吗?
答案 0 :(得分:0)
我终于通过使用自编译的Python.Runtime.dll(从2.4.0版开始)获得了成功。创建工作的DLL有两种选择:
net461
(仅保留netstandard2.0
)。dotnet build
对于选项2,以下有效:
cd src\runtime
dotnet build -c ReleaseWinPY3 -f netstandard2.0 Python.Runtime.15.csproj
bin\netstandard2.0\Python.Runtime.dll
)中,使用内置的DLL netcoreapp2.2
作为DLL引用,例如结合以下代码
using System;
using Python.Runtime;
namespace Python_CSharp
{
class Program
{
static void Main(string[] args)
{
using (Py.GIL())
{
dynamic os = Py.Import("os");
dynamic dir = os.listdir();
Console.WriteLine(dir);
foreach (var d in dir)
{
Console.WriteLine(d);
}
}
}
}
}
答案 1 :(得分:0)
您可以在.NET应用程序中直接托管IronPython解释器。例如,使用NuGet,您可以下载正确的包,然后将脚本执行(实际上是IronPython引擎)直接嵌入到您的应用程序中。