在 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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Zamzar API 不适用于 python dict

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

POST请求中的JSON可在HttpRequester中使用,但不适用于python Requests

来自分类Dev

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

来自分类Dev

RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

来自分类Dev

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

来自分类Dev

RavenDB查询不适用于C#,但可以在RavenDB Studio中使用吗?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用基于katana-owin的Web API运行的Swashbuckle不适用于IIS,但适用于IIS Express

来自分类Dev

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

来自分类Dev

适用于Mac的Python Winsound

来自分类Dev

VMFusion runScriptInGuest 不适用于 MAC

来自分类Dev

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

来自分类Dev

使用Java Smack API发送和接收消息不适用于示例

来自分类Dev

SetFocusable函数在我应该使用的API中不适用于我

来自分类Dev

使用自定义操作类时,Symfony验证不适用于Api Platform

来自分类Dev

Rest API调用可与curl配合使用,但不适用于PowerShell

来自分类Dev

正则表达式可在regex测试器中使用,但不适用于c#

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    Zamzar API 不适用于 python dict

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

    POST请求中的JSON可在HttpRequester中使用,但不适用于python Requests

  10. 10

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

  11. 11

    RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

  12. 12

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

  13. 13

    RavenDB查询不适用于C#,但可以在RavenDB Studio中使用吗?

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    使用基于katana-owin的Web API运行的Swashbuckle不适用于IIS,但适用于IIS Express

  21. 21

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

  22. 22

    适用于Mac的Python Winsound

  23. 23

    VMFusion runScriptInGuest 不适用于 MAC

  24. 24

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

  25. 25

    使用Java Smack API发送和接收消息不适用于示例

  26. 26

    SetFocusable函数在我应该使用的API中不适用于我

  27. 27

    使用自定义操作类时,Symfony验证不适用于Api Platform

  28. 28

    Rest API调用可与curl配合使用,但不适用于PowerShell

  29. 29

    正则表达式可在regex测试器中使用,但不适用于c#

热门标签

归档