嵌入式python问题
Posted
技术标签:
【中文标题】嵌入式python问题【英文标题】:Embedded python issue 【发布时间】:2017-09-17 13:45:34 【问题描述】:我完全是 Python 和嵌入式 Python 的新手。
当尝试从 C++ 运行一些基本的 python 命令时,似乎我的一些导入在 C++ 中不起作用,但当我从 python shell 运行它们时它们确实起作用。
这是我尝试运行的基本指令。
import sys
sys.path.insert(0, 'c:/svapp/')
sys.path.insert(0, 'c:/svapp/test')
from common import baseaccess
from debug.domains.pm import pm_tools
在我的 C++ 文件中,它看起来像这样:
int main()
Py_SetProgramName("myPythonProgram");
Py_Initialize();
PyRun_SimpleString("import sys,os");
PyObject *sys_path = PySys_GetObject("path");
PyList_Append(sys_path, PyString_FromString("c:\\svapp"));
PyList_Append(sys_path, PyString_FromString("c:\\svapp\\test"));
PyObject * commonModule = PyImport_ImportModule("common");
PyObject * debugDomainsModule =
PyImport_ImportModule("debug.domains.pm.pm_tools");
通用模块似乎加载得很好,但是当我尝试加载 debug.domains.pm.pm_tools 时,它似乎导入了一些内部导入。
错误的跟踪以 :
结尾文件“C:\Python27\lib\site-packages\namednodes__init__.py”,第 30 行,在 从 。导入设置 ImportError: 无法导入名称设置
你能指出我正确的方向吗? 为什么这只能通过嵌入式 C++ 应用程序发生?
提前感谢您提供的任何帮助。
【问题讨论】:
不确定 pm_tools 是什么,但是,如果它是一个符号而不是一个包,那么可能是由于您导入它的方式不同。在一种情况下您使用导入,在另一种情况下您使用“from”,其行为方式相似但不同 感谢您的评论。我能够发现问题是由于一些 python 本机导入需要 argv[''] 参数。将此参数添加到 sys.path 后,一切都像魅力一样。 写答案怎么样?也许有人可以从中受益。 显然,正如我之前的回答中提到的,这是导致 python2.7 namednodes 包行为不端的部分: PyRun_SimpleString("sys.argv = ['']");将此行添加到我的嵌入式代码中解决了这个问题。 【参考方案1】: 在Py_Initialize
之前致电Py_SetPath
在Py_Initialize
之前将Py_IgnoreEnvironmentFlag
设置为1
Windows 上的Py_SetPath
使用;
作为路径分隔符。在其他平台上是:
【讨论】:
以上是关于嵌入式python问题的主要内容,如果未能解决你的问题,请参考以下文章