Taro MURAOKA: > Hi. > > > > > Is loading the "site" module done by all versions of Python, or was it > > > added recently? > > > > I don't think all version. > > But as I can check, python 2.0-7 are loading the "site" module. > > > > 2.0 - > http://svn.python.org/view/python/branches/release20-maint/Python/pythonrun.c?view=markup > > 2.2 - > http://svn.python.org/view/python/branches/release22-maint/Python/pythonrun.c?view=markup > > 2.6 - > http://svn.python.org/view/python/branches/release26-maint/Python/pythonrun.c?view=markup > > > > But it seems that only 2.7 call "exit()" when it failed. > > > > > I suppose that without the "site" module Python cannot do its work? > > > > Pure Python may be able to work without the "site" module. > > Python CLI has an option "-S" to disable implicit "site" loading. > > But most of existing Vim plugins which use Python interface, > > would expect "site" is loaded implicitly. > > > > 2014-07-21 5:05 GMT+09:00 Bram Moolenaar <b...@moolenaar.net>: > > > > > > Taro Muraoka wrote: > > > > > >> Hi list and Bram. > > >> > > >> I wrote a patch to fix a problem related if_python. > > >> Please check attached. > > >> > > >> Problem: > > >> When python 2.7 can't find "site" module, vim is exit. > > >> For example, on Windows which not installed official python 2.7, > > >> but installed Mecurial or so (py2exe'ed binary), > > >> Vim will try to load python27.dll of Mercurial, > > >> but it failed to load "site" module, and exit. > > >> > > >> The cause: > > >> Python try to load "site" module, and if it is failed, call exit(). > > >> See at line 718 in > >> http://svn.python.org/view/python/branches/release27-maint/Python/pythonrun.c?revision=85905&view=markup > > >> > > >> Solution: > > >> Suppress to load "site" module by setting Py_NoSiteFlag before > >> Py_Initialize(), > > >> then load it explicitly. > > > > > > Is loading the "site" module done by all versions of Python, or was it > > > added recently? > > > > > > I suppose that without the "site" module Python cannot do its work? > > > > > > > > > -- > > > SOLDIER: What? Ridden on a horse? > > > ARTHUR: Yes! > > > SOLDIER: You're using coconuts! > > > "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES > > LTD > > > > > > /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net \\\ > > > /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ > > > \\\ an exciting new programming language -- http://www.Zimbu.org /// > > > \\\ help me help AIDS victims -- http://ICCF-Holland.org /// > > > > > > > > -- > > MURAOKA Taro <koron.kaor...@gmail.com>
I have updated the patch to limit for Python 2.7 or above. Please check attached. -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
# HG changeset patch # Parent 8ac1a3f3273929167574f064c810a1f4e3f851b9 diff -r 8ac1a3f32739 src/if_python.c --- a/src/if_python.c Mon Jul 21 08:46:27 2014 +0900 +++ b/src/if_python.c Mon Jul 21 08:57:37 2014 +0900 @@ -295,6 +295,9 @@ # define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr # define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 +# define Py_NoSiteFlag (*dll_Py_NoSiteFlag) +# endif /* * Pointers for dynamic link @@ -440,6 +443,9 @@ static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *)); static void* (*dll_PyCObject_AsVoidPtr)(PyObject *); # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 +static int* dll_Py_NoSiteFlag; +# endif static HINSTANCE hinstPython = 0; /* Instance of python.dll */ @@ -633,6 +639,9 @@ {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr}, {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr}, # endif +# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + {"Py_NoSiteFlag", (PYTHON_PROC*)&dll_Py_NoSiteFlag}, +# endif {"", NULL}, }; @@ -901,6 +910,10 @@ { if (!initialised) { +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + PyObject *site; +#endif + #ifdef DYNAMIC_PYTHON if (!python_enabled(TRUE)) { @@ -915,11 +928,28 @@ init_structs(); +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + /* Disable implicit 'import site'. */ + Py_NoSiteFlag++; +#endif + #if !defined(MACOS) || defined(MACOS_X_UNIX) Py_Initialize(); #else PyMac_Initialize(); #endif + +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000 + /* 'import site' explicitly. */ + site = PyImport_ImportModule("site"); + if (site == NULL) + { + EMSG(_("EXXX: Sorry, this command is disabled, the Python's site module could not be loaded.")); + goto fail; + } + Py_DECREF(site); +#endif + /* Initialise threads, and below save the state using * PyEval_SaveThread. Without the call to PyEval_SaveThread, thread * specific state (such as the system trace hook), will be lost