【问题标题】:Python script import from PATH in C++在 C++ 中从 PATH 导入 Python 脚本
【发布时间】:2013-07-02 16:09:03
【问题描述】:

我正在尝试使用Python.h 在 C++ 程序中运行 Python 脚本。因为这个 C++ 程序可以安装 (make install) 到 /usr/bin,所以它需要能够在它自己的目录(如果它没有安装)或 PATH 环境变量的目录之一中找到 Python 脚本。

我已经尝试过:

PyObject *pName = PyString_FromString(scriptName); // scriptName is "file.py" as a char*
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
PyObject *pModule = PyImport_Import(name); // not working because absolute path only
                                           //since Python 2.7 ?

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
PyObject *pModule = PyImport_ImportModuleEx(scriptName, NULL, NULL, NULL);

但是在这个调用之后,两者都给我留下了pModule == NULL,但是如果我从它自己的目录运行 C++ 模块,它就可以工作。

非常感谢您的帮助

【问题讨论】:

  • 几个问题:1)应用程序会从包含python脚本的目录运行吗? 2)你有没有试过在Py_Initialize之前调用PySys_SetArgvEx,并设置应用路径?
  • 1) 当然,make 将 C++ 可执行文件放在 Python 脚本所在的同一目录中。 make install 将 C++ 可执行文件和 Python 脚本复制到 usr/bin(或用户想要安装它们的任何位置)。 2) 我没有,主要是因为这部分 C++ 程序离main 很远,因此也离原来的argcargv 变量很远。我需要这样做来设置应用程序路径吗?

标签: c++ python import path


【解决方案1】:

"." 仅当 C++ python 脚本的根目录时才用作 python 脚本的路径 是您进程的当前工作目录

如果您的程序是从其他地方启动的(通过 PATH 或 /path/to/a/program) 那么找到脚本的唯一可靠方法是使用来自mainargv[0] 参数。

一旦找到正确的路径,有两种使用方法:

  1. 传递给sys.path.append
  2. 使用chdir(来自unistd.h)切换工作目录,然后您可以将"." 传递给sys.path.appendchdir 会影响整个过程,但优点是您可以直接在 main 中进行操作。

【讨论】:

  • 这就是我所担心的,从我读到的内容来看,学习 argv[0] 并不是一件完全可靠的事情......不过感谢您的明确回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多