[英]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.