void PyEmbedder::InitPython()
{
	int iRet = 0;
	if(!Py_IsInitialized())
	{
		Py_SetProgramName("AnimatLab");
		Py_Initialize();

		if(!Py_IsInitialized())
			THROW_ERROR(Al_Err_lFailedToInitPython, Al_Err_strFailedToInitPython);

		Simulator *lpSim = ActiveSim();
		if(!lpSim)
			THROW_ERROR(Al_Err_lSimNotDefined, Al_Err_strSimNotDefined);

		std::string strExePath = lpSim->ExecutablePath();
		strExePath = Std_Replace(strExePath, "\\", "/");

		//Import base modules and set paths correctly.
		std::string strInit = "import os,sys,traceback,math\n"
							  "sys.path.append(\"" + strExePath + "\")\n"
							  "os.chdir(\"" + strExePath + "\")\n";
		iRet = PyRun_SimpleString(strInit.c_str());
		if(iRet != 0)
			THROW_ERROR(Al_Err_lFailedToInitPython, Al_Err_strFailedToInitPython);

		//Try to import AnimatSimPy
		iRet = PyRun_SimpleString("import AnimatSimPy\n");
		if(iRet != 0)
			THROW_ERROR(Al_Err_lFailedToImportAnimatSimPy, Al_Err_strFailedToImportAnimatSimPy);

		//Setup sys exception handler for animatsim.
		std::string strExcept = "def animat_excepthook(type, value, tb):\n"
							    "    strErr = \"\".join(traceback.format_exception(type, value, tb))\n"
							    "    AnimatSimPy.SetLastScriptError(strErr)\n"
							    "sys.excepthook = animat_excepthook\n";
		iRet = PyRun_SimpleString(strExcept.c_str());
		if(iRet != 0)
			THROW_ERROR(Al_Err_lFailedToInitPython, Al_Err_strFailedToInitPython);

		//For testing of exception handler.
		//std::string strTest = "a = \"text\"\n"
		//					  "b = 5\n"
		//					  "error = a + b\n";
		//iRet = PyRun_SimpleString(strTest.c_str());
		//if(iRet != 0)
		//{
		//	std::string strErr = GetLastScriptError();
		//}

		m_bPyInit = true;
	}
}