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 <[email protected]>:
>
> >
>
> > 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 -- [email protected] -- 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 <[email protected]>
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 [email protected].
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