Linux 上的 pythonnet 和 .net 核心:无法声明类似字典的对象

pythonnet & .net core on Linux: Cannot declare a dictionary-like object

我正在为 Linux 制作 .net 核心应用程序。该应用程序利用 pythonnet 库与 Linux 框上的 python 模块进行交互。

我正在尝试使用 python-apt 模块进行一些 Debian 包管理,例如apt.cache class.

本机 python 脚本可以正常工作 运行 直接在 Linux 打印所有包:

import apt
cache = apt.Cache()
for pkg_name in cache.keys():
     print(pkg_name)

我的 VB.net 核心代码在正确声明 apt.Cache() 对象时遇到问题:

Runtime.PythonDLL = "/usr/lib/python3.9/config-3.9-x86_64-linux-gnu/libpython3.9.so"
Python.Runtime.PythonEngine.PythonHome = "/usr/lib/python3.9"
PythonEngine.Initialize()
Using Py.GIL
    Dim apt As PyObject = Py.Import("apt_pkg")
    Dim cache As PyDict = apt.Cache()
    ...
End Using

我得到异常:

_system not initialized at Python.Runtime.PythonException.ThrowLastAsClrException() at Python.Runtime.PyObject.Invoke(PyTuple args, PyDict kw) at Python.Runtime.PyObject.InvokeMethod(String name, PyTuple args, PyDict kw) at Python.Runtime.PyObject.TryInvokeMember(InvokeMemberBinder binder, Object[] args, Object& result) at CallSite.Target(Closure , CallSite , Object ) at CallSite.Target(Closure , CallSite , Object ) at Microsoft.VisualBasic.CompilerServices.IDOUtils.CreateRefCallSiteAndInvoke(CallSiteBinder action, Object instance, Object[] arguments) at Microsoft.VisualBasic.CompilerServices.IDOBinder.IDOGet(IDynamicMetaObjectProvider instance, String memberName, Object[] arguments, String[] argumentNames, Boolean[] copyBack) at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object instance, Type type, String memberName, Object[] arguments, String[] argumentNames, Type[] typeArguments, Boolean[] copyBack) at py_test_vb_core.Program.Main(String[] args) in Y:\Development projects~3rd part libraries\pythonnet\py_test_vb_core\py_test_vb_core\Program.vb:line 17

documentationapt.Cache() 是一个“类似字典的对象”

我在 Windows 上使用 Visual Studio,我可以使用 SSH 连接到 Linux 盒子,并且可以很好地调试 .net 核心应用程序。

另一个问题:是否可以在 Visual Studio 调试器中公开本机 python python-apt 模块的所有 class 成员等?我不敢寄希望于 IntelliSense 支持,但如果我能在调试中看到 python-apt 模块的 class 成员等,那将是一个很大的帮助?它还可以帮助我正确声明上述对象。

(c#帮助也可以)

我想我只是导入了错误的模块,apt_pkg 而不是 apt

C# 版本(.net 中嵌入的 python 代码):

static void Main(string[] args)
{
    Runtime.PythonDLL = "/usr/lib/python3.9/config-3.9-x86_64-linux-gnu/libpython3.9.so";
    //PythonEngine.PythonHome = "/usr/bin/python3"; //"/usr/lib/python3.9"; // 
    //PythonEngine.Initialize();
    using (Py.GIL())
    {
        dynamic APT = Py.Import("apt"); // Type: <module 'apt' from '/usr/lib/python3/dist-packages/apt/__init__.py'>
        dynamic Cache = APT.Cache();    // Type: <apt.cache.Cache object at 0x7fa701ec6760>
        dynamic PKGs = Cache.keys();    // Type: ['0ad', '0ad-data',...]
        foreach (string pkg_name in (String[])PKGs)
            {
                Console.WriteLine(pkg_name);
            }
    }
    Environment.Exit(0);
}