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

Raspunde prin e-mail lui