![](/img/trans.png)
[英]Python 3 Import error AttributeError: '_ModuleLock_' object has no attribute 'name' when script invoked from c++
[英]Python script import from PATH in C++
我正在尝试使用Python.h
在C ++程序中运行Python脚本。 因为此C ++程序可以make install
在/usr/bin
( make install
),所以它需要能够在其自己的目录(如果未安装)或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 ++模块,它们会起作用。
非常感谢你的帮助
"."
仅当C ++ python脚本的根目录是进程的当前工作目录时 ,它才用作python脚本的路径。
如果你的程序从别的地方开始(通过PATH或/路径/到/ A /程序),那么唯一可靠的方式找到你的脚本是用用你argv[0]
PARAM从main
。
找到正确的路径后,有两种使用方法:
sys.path.append
chdir
(来自unistd.h)在该目录中切换工作目录 ,然后可以传递"."
到sys.path.append
。 chdir
将影响整个过程,但是优点是您可以直接在main
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.