mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	Refactor for Python 3.11 deprecated functions (#1538)
This commit is contained in:
		| @@ -29,26 +29,72 @@ PythonInit::PythonInit() | |||||||
| 	// register modules | 	// register modules | ||||||
| 	EffectModule::registerHyperionExtensionModule(); | 	EffectModule::registerHyperionExtensionModule(); | ||||||
|  |  | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 	PyStatus status; | ||||||
|  | 	PyConfig config; | ||||||
|  | 	PyConfig_InitPythonConfig(&config); | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #if defined(ENABLE_DEPLOY_DEPENDENCIES) | #if defined(ENABLE_DEPLOY_DEPENDENCIES) | ||||||
|  |  | ||||||
|  | 	Debug(Logger::getInstance("DAEMON"), "Initializing Python config"); | ||||||
| 	// Set Program name | 	// Set Program name | ||||||
| 	wchar_t programName[] = L"Hyperion"; | 	wchar_t programName[] = L"Hyperion"; | ||||||
| 	Py_SetProgramName(programName); |  | ||||||
|  |  | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 	status = PyConfig_SetString(&config, &config.program_name, programName); | ||||||
|  | 	if (PyStatus_Exception(status)) { | ||||||
|  | 		goto exception; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | #else | ||||||
|  | 	Py_SetProgramName(programName); | ||||||
|  | #endif | ||||||
|  | 	{ | ||||||
| 		// set Python module path when exists | 		// set Python module path when exists | ||||||
| 		QString py_path = QDir::cleanPath(qApp->applicationDirPath() + "/../lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + "." + STRINGIFY(PYTHON_VERSION_MINOR)); | 		QString py_path = QDir::cleanPath(qApp->applicationDirPath() + "/../lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + "." + STRINGIFY(PYTHON_VERSION_MINOR)); | ||||||
| 		QString py_file = QDir::cleanPath(qApp->applicationDirPath() + "/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + STRINGIFY(PYTHON_VERSION_MINOR) + ".zip"); | 		QString py_file = QDir::cleanPath(qApp->applicationDirPath() + "/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + STRINGIFY(PYTHON_VERSION_MINOR) + ".zip"); | ||||||
| 		QString py_framework = QDir::cleanPath(qApp->applicationDirPath() + "/../Frameworks/Python.framework/Versions/Current/lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + "." + STRINGIFY(PYTHON_VERSION_MINOR)); | 		QString py_framework = QDir::cleanPath(qApp->applicationDirPath() + "/../Frameworks/Python.framework/Versions/Current/lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + "." + STRINGIFY(PYTHON_VERSION_MINOR)); | ||||||
|  |  | ||||||
| 	if (QFile(py_file).exists() || QDir(py_path).exists() || QDir(py_framework).exists() ) | 		if (QFile(py_file).exists() || QDir(py_path).exists() || QDir(py_framework).exists()) | ||||||
| 		{ | 		{ | ||||||
| 			Py_NoSiteFlag++; | 			Py_NoSiteFlag++; | ||||||
| 			if (QFile(py_file).exists()) // Windows | 			if (QFile(py_file).exists()) // Windows | ||||||
| 			{ | 			{ | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 				status = PyConfig_SetBytesString(&config, &config.home, QSTRING_CSTR(py_file)); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  | 				config.module_search_paths_set = 1; | ||||||
|  | 				status = PyWideStringList_Append(&config.module_search_paths, const_cast<wchar_t*>(py_file.toStdWString().c_str())); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  | #else | ||||||
| 				Py_SetPythonHome(Py_DecodeLocale(py_file.toLatin1().data(), nullptr)); | 				Py_SetPythonHome(Py_DecodeLocale(py_file.toLatin1().data(), nullptr)); | ||||||
| 				Py_SetPath(Py_DecodeLocale(py_file.toLatin1().data(), nullptr)); | 				Py_SetPath(Py_DecodeLocale(py_file.toLatin1().data(), nullptr)); | ||||||
|  | #endif | ||||||
| 			} | 			} | ||||||
| 			else if (QDir(py_path).exists()) // Linux | 			else if (QDir(py_path).exists()) // Linux | ||||||
| 			{ | 			{ | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 				status = PyConfig_SetBytesString(&config, &config.home, QSTRING_CSTR(QDir::cleanPath(qApp->applicationDirPath() + "/../"))); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				config.module_search_paths_set = 1; | ||||||
|  | 				status = PyWideStringList_Append(&config.module_search_paths, const_cast<wchar_t*>(QDir(py_path).absolutePath().toStdWString().c_str())); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				status = PyWideStringList_Append(&config.module_search_paths, const_cast<wchar_t*>(QDir(py_path + "/lib-dynload").absolutePath().toStdWString().c_str())); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  | #else | ||||||
| 				QStringList python_paths; | 				QStringList python_paths; | ||||||
| 				python_paths.append(QDir(py_path).absolutePath()); | 				python_paths.append(QDir(py_path).absolutePath()); | ||||||
| 				python_paths.append(QDir(py_path + "/lib-dynload").absolutePath()); | 				python_paths.append(QDir(py_path + "/lib-dynload").absolutePath()); | ||||||
| @@ -57,9 +103,27 @@ PythonInit::PythonInit() | |||||||
| 				Py_SetPath(joined_paths.data()); | 				Py_SetPath(joined_paths.data()); | ||||||
| 				py_path = QDir::cleanPath(qApp->applicationDirPath() + "/../"); | 				py_path = QDir::cleanPath(qApp->applicationDirPath() + "/../"); | ||||||
| 				Py_SetPythonHome(Py_DecodeLocale(py_path.toLatin1().data(), nullptr)); | 				Py_SetPythonHome(Py_DecodeLocale(py_path.toLatin1().data(), nullptr)); | ||||||
|  | #endif | ||||||
| 			} | 			} | ||||||
| 			else if (QDir(py_framework).exists()) // macOS | 			else if (QDir(py_framework).exists()) // macOS | ||||||
| 			{ | 			{ | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 				status = PyConfig_SetBytesString(&config, &config.home, QSTRING_CSTR(QDir::cleanPath(qApp->applicationDirPath() + "/../Frameworks/Python.framework/Versions/Current"))); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				config.module_search_paths_set = 1; | ||||||
|  | 				status = PyWideStringList_Append(&config.module_search_paths, const_cast<wchar_t*>(QDir(py_framework).absolutePath().toStdWString().c_str())); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				status = PyWideStringList_Append(&config.module_search_paths, const_cast<wchar_t*>(QDir(py_framework + "/lib-dynload").absolutePath().toStdWString().c_str())); | ||||||
|  | 				if (PyStatus_Exception(status)) { | ||||||
|  | 					goto exception; | ||||||
|  | 				} | ||||||
|  | #else | ||||||
| 				QStringList python_paths; | 				QStringList python_paths; | ||||||
| 				python_paths.append(QDir(py_framework).absolutePath()); | 				python_paths.append(QDir(py_framework).absolutePath()); | ||||||
| 				python_paths.append(QDir(py_framework + "/lib-dynload").absolutePath()); | 				python_paths.append(QDir(py_framework + "/lib-dynload").absolutePath()); | ||||||
| @@ -68,8 +132,19 @@ PythonInit::PythonInit() | |||||||
| 				Py_SetPath(joined_paths.data()); | 				Py_SetPath(joined_paths.data()); | ||||||
| 				py_framework = QDir::cleanPath(qApp->applicationDirPath() + "/../Frameworks/Python.framework/Versions/Current"); | 				py_framework = QDir::cleanPath(qApp->applicationDirPath() + "/../Frameworks/Python.framework/Versions/Current"); | ||||||
| 				Py_SetPythonHome(Py_DecodeLocale(py_framework.toLatin1().data(), nullptr)); | 				Py_SetPythonHome(Py_DecodeLocale(py_framework.toLatin1().data(), nullptr)); | ||||||
|  | #endif | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | 	status = Py_InitializeFromConfig(&config); | ||||||
|  | 	if (PyStatus_Exception(status)) { | ||||||
|  | 		goto exception; | ||||||
|  | 	} | ||||||
|  | 	PyConfig_Clear(&config); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| 	// init Python | 	// init Python | ||||||
| @@ -86,6 +161,15 @@ PythonInit::PythonInit() | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| 	mainThreadState = PyEval_SaveThread(); | 	mainThreadState = PyEval_SaveThread(); | ||||||
|  | 	return; | ||||||
|  |  | ||||||
|  | #if (PY_VERSION_HEX >= 0x03080000) | ||||||
|  | exception: | ||||||
|  | 	Error(Logger::getInstance("DAEMON"), "Initializing Python config failed with error [%s]", status.err_msg); | ||||||
|  | 	PyConfig_Clear(&config); | ||||||
|  |  | ||||||
|  | 	throw std::runtime_error("Initializing Python failed!"); | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| PythonInit::~PythonInit() | PythonInit::~PythonInit() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user