#include #include void py_init_osx_set_home_shared_pkg(void) { // sets python_home to /support/pythonX.Y folder wchar_t *python_home; CFURLRef bundle_url; CFURLRef bundle_abs_url; CFStringRef bundle_str; const char* bundle_path; const char* relative_path = "support/python3.9"; CFStringRef relative_path_str; CFURLRef externals_url; CFURLRef package_url; CFURLRef py_home_url; CFStringRef py_home_str; const char* py_home_path; // get self bundle path bundle_url = CFBundleCopyBundleURL(py_global_bundle); bundle_abs_url = CFURLCopyAbsoluteURL(bundle_url); bundle_str = CFURLCopyFileSystemPath(bundle_abs_url, kCFURLPOSIXPathStyle); bundle_path = CFStringGetCStringPtr(bundle_str, kCFStringEncodingUTF8); // get the absolute path of the /support/python3.9 directory in a package externals_url = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorDefault, bundle_abs_url); package_url = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorDefault, externals_url); relative_path_str = CFStringCreateWithCString(kCFAllocatorDefault, relative_path, kCFStringEncodingASCII); py_home_url = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault, package_url, relative_path_str, FALSE); py_home_str = CFURLCopyFileSystemPath(py_home_url, kCFURLPOSIXPathStyle); py_home_path = CFStringGetCStringPtr(py_home_str, kCFStringEncodingUTF8); CFRelease(bundle_str); CFRelease(bundle_abs_url); CFRelease(bundle_url); CFRelease(py_home_str); CFRelease(py_home_url); CFRelease(relative_path_str); CFRelease(package_url); CFRelease(externals_url); post("py bundle_path: %s", bundle_path); post("py home path: %s", py_home_path); python_home = Py_DecodeLocale(py_home_path, NULL); if (python_home == NULL) { error("unable to set python_home"); return; } Py_SetPythonHome(python_home); }