【问题标题】:how to load a custom python module in c如何在c中加载自定义python模块
【发布时间】:2012-11-05 12:14:18
【问题描述】:

到目前为止,我只是想在 python 文档中获取this example,以便在 C 中嵌入 python 模块来工作。我的问题是我不知道在哪里放置 python 脚本。我的最终目标是通过执行PyImport_Import(...) 在C 中加载完整的python 包(带有__init__.py 和各种模块的文件夹)。但现在,请让我知道将显示的脚本放在哪里(文件名、路径等),以便给定的 C 程序运行。

编辑

我应该指出我的尝试。我尝试将multiply.py 文件放在本地目录中,以及将其放在__init__.py 文件中名为multiply 的子目录中。在所有这些情况下,我都会得到ImportError: No module named multiply

【问题讨论】:

    标签: python c embed


    【解决方案1】:

    我认为它应该在同一目录中或sys.path 中,因为它按名称加载模块,这应该可以:

    ./call multiply multiply 5 6
    

    更新:如果我将当前目录显式添加到 sys.path 它可以工作:

    Py_Initialize();
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append(\".\")");
    

    然后打印出来:

    ./call multiply multiply 5 6
    ('Will compute', 5, 'times', 6)
    Result of call: 30
    

    更新:我问了一个相关问题,看来如果你只添加PySys_SetArgv 就可以了:

    Py_Initialize();
    PySys_SetArgv(argc, argv);
    

    这里提到了原因:

    否则(即,如果 argc 为 0 或 argv[0] 不指向 现有文件名),在 sys.path 前添加一个空字符串, 与添加当前工作目录(“.”)相同

    这也是你可以在那里查看答案的问题:

    Why does PyImport_Import fail to load a module from the current directory?

    【讨论】:

    • PyImport_Import(...) 需要一个模块名称。
    • @ewok 你是如何运行程序的?
    • @mux 完全按照文档中的说明:call multiply multiply 3 2
    • @mux 明白了!路径是问题
    • @ewok 是的,但是python应该查看当前目录的模块,我认为问题出在PyImport_Import我会检查。
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2020-06-13
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多