1. 程式人生 > >c++載入python模組,但是PyImport_ImportModule老返回NULL

c++載入python模組,但是PyImport_ImportModule老返回NULL

問題描述: 

呼叫 PyImport_ImportModule載入python老是返回NULL,如下所示:“沒有找到符號” 

解決辦法:

import某塊返回值為0的是因為:VC工程的當前工作目錄和.py檔案所在目錄不一致導致的。
當.py檔案和工程不在統一目錄時,若要import .py檔案,只需要在import之前增加python的搜尋目錄就可以了:

   PyRun_SimpleString("import sys"); 
   PyRun_SimpleString("sys.path.append('py所在目錄')");


#include "stdafx.h"
#include <Python.h>
#include <stdio.h>
#include <iostream>  
using namespace std;    //匯入std名字空間  


int _tmain(int argc, _TCHAR* argv[])
{
	
	cout << "Starting Test..." << endl;
	Py_Initialize();//使用python之前,要呼叫Py_Initialize();這個函式進行初始化  
	PyObject * pModule = NULL;//宣告變數  
	PyObject * pFunc = NULL;//宣告變數 
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('D:/2018program/VCPythonFile/VCPythonFile/')");
	cout << "------------"<<endl;
	pModule = PyImport_ImportModule("helloworld");//這裡是要呼叫的Python檔名  
	cout << pModule << endl;
	pFunc = PyObject_GetAttrString(pModule, "printHello"); //這裡是要呼叫的函式名  
	PyEval_CallObject(pFunc, NULL); //呼叫函式,NULL表示引數為空  
	Py_Finalize();//呼叫Py_Finalize,這個和Py_Initialize相對應的. 
	return 1;
}

helloworld.py 內容如下: