diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index 977da30139f..ccf0457aa21 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -47,6 +47,7 @@ struct _object; // forward declaration for PyObject ! void BPY_start_python(void); void BPY_end_python(void); +void BPY_syspath_append_pythondir(void); int BPY_Err_getLinenumber(void); const char *BPY_Err_getFilename(void); /* void BPY_Err_Handle(struct Text *text); */ diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c index 5a388b1ea0d..1b3ff468361 100644 --- a/source/blender/python/BPY_interface.c +++ b/source/blender/python/BPY_interface.c @@ -178,6 +178,9 @@ void init_syspath(void) if (U.pythondir) { /* XXX not working, U.pythondir is NULL here ?!?*/ /* maybe it wasn't defined yet at this point in start-up ...*/ + /* Update: definitely that is the reason. We need to start python + * after U.pythondir is defined (better after the other U.xxxx are + * too. */ p = Py_BuildValue("s", U.pythondir); syspath_append(p); /* append to module search path */ } @@ -192,6 +195,18 @@ void init_syspath(void) } } +/*****************************************************************************/ +/* Description: This function adds the user defined folder for Python */ +/* scripts to sys.path. This is done in init_syspath, too, but */ +/* when Blender's main() runs BPY_start_python(), U.pythondir */ +/* isn't set yet, so we provide this function to be executed */ +/* after U.pythondir is defined. */ +/*****************************************************************************/ +void BPY_syspath_append_pythondir(void) +{ + syspath_append(Py_BuildValue("s", U.pythondir)); +} + /*****************************************************************************/ /* Description: This function will return the linenumber on which an error */ /* has occurred in the Python script. */ diff --git a/source/creator/creator.c b/source/creator/creator.c index d057c20068d..d17080fbdeb 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -388,6 +388,15 @@ int main(int argc, char **argv) sound_init_audio(); BIF_init(); + + /** + * NOTE: the U.pythondir string is NULL until BIF_init() is executed, + * so we provide the BPY_ function below to append the user defined + * pythondir to Python's sys.path at this point. Simply putting + * BIF_init() before BPY_start_python() crashes Blender at startup. + */ + + BPY_syspath_append_pythondir(); } else { BPY_start_python();