在 c 中使用 python api 不适用于 mac

贾斯汀

我正在尝试导入与 main.c 文件位于同一目录中的 python 文件,但由于某种原因它不起作用。我一直在 PyImport_ImportModule('dizzle') 失败。任何帮助将不胜感激我在 Mac 上(*我可以让它在 Ubuntu 上工作,这很奇怪)我设置了 PYTHONPATH。

mytestfolder 
   main.c
   dizzle.py

这是我的 main.c

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <Python/Python.h>

int main()
{ 
  char *xx = getpimacaddress2();
  printf("%s", xx);

}

char *getpimacaddress2()
{



    Py_Initialize();


    PyObject* module = PyImport_ImportModule("dizzle");
    assert(module != NULL);

    PyObject* klass = PyObject_GetAttrString(module, "SnowTest");
    assert(klass != NULL);

    PyObject* instance = PyInstance_New(klass, NULL, NULL);
    assert(instance != NULL);

    PyObject* result = PyObject_CallMethod(instance, "add_test", "(ii)", 10, 34);
    assert(result != NULL);

    Py_Finalize();

    return PyString_AsString(result);
}

Python文件dizzle.py

class SnowTest:

  def add_test(self, x, y):
    z = x + y 
    return str(z)
瓦伦丁

我能够重现这个问题。但是请注意,我是在 Windows 上这样做的。解决方法应该是一样的。我在评论中提到它可能与sys.path. 经过测试,这实际上是问题所在。

调用后立即Py_Initialize()执行以下操作:

PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
PyList_Append(path, PyUnicode_FromString("..."));

...用检索应用程序当前工作目录的内容替换(在您的情况下将是包含dizzle.py文件的目录)。

您还可以检查:

PyRun_SimpleString("print(os.getcwd())");

如果它打印应用程序的当前工作目录,那么您可以在调用后立即执行以下操作Py_Initialize()

PyRun_SimpleString("sys.path.append(os.getcwd())");

做其中任何一个都让assert(module != NULL)我通过。

如果它确实与PYTHONPATH(我怀疑基于您的错误)有关。然后你可以使用Py_SetPythonHome(L"/path/to/python").

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

相同的 BSD 套接字 API 程序适用于 Python 但不适用于 C++ 或 Rust

编码适用于 1 而不适用于 Twitter 中使用 python 的其他列表

Qt C++ macOS 问题。我正在使用函数 .find("a word") 在多组中搜索单词,它适用于 Windows,但不适用于 mac

使用Docker + Kitura,但不适用于Mac

适用于Mac的python win32api

windows API 不适用于 python3,但适用于 python 2

googlemaps api适用于python终端,但不适用于脚本

Xero API 不适用于 python 中的帐户

Zamzar API 不适用于 python dict

Lua C API不适用于指针

Rest API post 请求不适用于 Mac 和 Ubuntu 的 Postman,但仅适用于 Windows

Jupyter Notebook中的适用于Python 3的ModuleNotFoundError,但不适用于Python 2(Mac OSX)

适用于Mac的python_qpid_proton(使用amqps)

Google Maps API GeoJSON不适用于IE 11,但可在Chrome中使用

通过引用传递可在C中使用,但不适用于此代码的C ++

Python多重处理可在Linux中使用,但不适用于Windows

在Windows 10 UWP中使用C#添加时,ScrollViewer不适用于ListView

RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

C中使用无效指针的通用堆栈不适用于字符串

Office 365 Outlook REST API - Office.context.mailbox.displayMessageForm 不适用于 Mac Outlook

RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

相同的程序适用于 C,但不适用于 C++(使用 linux 系统调用)

使用数据注释的模型验证不适用于Mac VS.NET

使用TOR来获取代理的Python硒适用于Firefox,但不适用于Chrome

适用于Mac的Python Winsound

适用于Mac的C ++ Jupyter内核

VMFusion runScriptInGuest 不适用于 MAC

Twilio的Python WhatsApp API不适用于基于响应的条件流语句

C#Web API [必需]不适用于复杂对象中的某些类