diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-10-28 11:40:48 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-10-28 11:40:52 +0300 |
commit | a8ca79cbe694ee7639343695d6367d30cb2ab589 (patch) | |
tree | 0f2cc9197f2821a25a480a539d27bd9c391890ad /source/blender/python | |
parent | 4f24808d08f47af661104f5976e17c57e8086ea9 (diff) |
Revert "PyAPI: point sys.executable to the Python binary"
This reverts commit 04c5471ceefb41c9e49bf7c86f07e9e7b8426bb3.
This causes Blender not to start on some systems.
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/intern/bpy_app.c | 33 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 20 |
2 files changed, 33 insertions, 20 deletions
diff --git a/source/blender/python/intern/bpy_app.c b/source/blender/python/intern/bpy_app.c index 8354e220b09..554ab2645a7 100644 --- a/source/blender/python/intern/bpy_app.c +++ b/source/blender/python/intern/bpy_app.c @@ -292,13 +292,36 @@ static int bpy_app_global_flag_set__only_disable(PyObject *UNUSED(self), return bpy_app_global_flag_set(NULL, value, closure); } +#define BROKEN_BINARY_PATH_PYTHON_HACK + PyDoc_STRVAR(bpy_app_binary_path_python_doc, - "String, the path to the python executable (read-only). " - "Deprecated! Use ``sys.executable`` instead."); -static PyObject *bpy_app_binary_path_python_get(PyObject *UNUSED(self), void *UNUSED(closure)) + "String, the path to the python executable (read-only)"); +static PyObject *bpy_app_binary_path_python_get(PyObject *self, void *UNUSED(closure)) { - PyErr_Warn(PyExc_RuntimeWarning, "Use 'sys.executable' instead of 'binary_path_python'!"); - return Py_INCREF_RET(PySys_GetObject("executable")); + /* refcount is held in BlenderAppType.tp_dict */ + static PyObject *ret = NULL; + + if (ret == NULL) { + /* only run once */ + char fullpath[1024]; + BKE_appdir_program_python_search( + fullpath, sizeof(fullpath), PY_MAJOR_VERSION, PY_MINOR_VERSION); + ret = PyC_UnicodeFromByte(fullpath); +#ifdef BROKEN_BINARY_PATH_PYTHON_HACK + Py_INCREF(ret); + UNUSED_VARS(self); +#else + PyDict_SetItem( + BlenderAppType.tp_dict, + /* XXX BAAAADDDDDD! self is not a PyDescr at all! it's bpy.app!!! */ PyDescr_NAME(self), + ret); +#endif + } + else { + Py_INCREF(ret); + } + + return ret; } PyDoc_STRVAR(bpy_app_debug_value_doc, diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 894a9a69198..c4523363a91 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -306,22 +306,12 @@ void BPY_python_start(bContext *C, int argc, const char **argv) PyThreadState *py_tstate = NULL; const char *py_path_bundle = BKE_appdir_folder_id(BLENDER_SYSTEM_PYTHON, NULL); - /* Setting the program name is important so the 'multiprocessing' module - * can launch new Python instances. */ + /* Not essential but nice to set our name. */ { - char program_path[FILE_MAX]; - if (BKE_appdir_program_python_search( - program_path, sizeof(program_path), PY_MAJOR_VERSION, PY_MINOR_VERSION)) { - wchar_t program_path_wchar[FILE_MAX]; - BLI_strncpy_wchar_from_utf8( - program_path_wchar, program_path, ARRAY_SIZE(program_path_wchar)); - Py_SetProgramName(program_path_wchar); - } - else { - fprintf(stderr, - "Unable to find the python binary, " - "the multiprocessing module may not be functional!\n"); - } + const char *program_path = BKE_appdir_program_path(); + wchar_t program_path_wchar[FILE_MAX]; + BLI_strncpy_wchar_from_utf8(program_path_wchar, program_path, ARRAY_SIZE(program_path_wchar)); + Py_SetProgramName(program_path_wchar); } /* must run before python initializes */ |