mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.1451: difficult to set the python home directories properly
Problem: It is difficult to set the python home directory properly for Python 2.7 and 3.5 since both use $PYTHONHOME. Solution: Add the 'pythonhome' and 'pythonthreehome' options. (Kazuki Sakamoto, closes #1266)
This commit is contained in:
@@ -5965,6 +5965,20 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
DYNAMIC_PYTHON_DLL, which was specified at compile time.
|
DYNAMIC_PYTHON_DLL, which was specified at compile time.
|
||||||
Environment variables are expanded |:set_env|.
|
Environment variables are expanded |:set_env|.
|
||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
|
security reasons.
|
||||||
|
|
||||||
|
*'pythonhome'*
|
||||||
|
'pythonhome' string (default "")
|
||||||
|
global
|
||||||
|
{not in Vi}
|
||||||
|
{only available when compiled with the |+python/dyn|
|
||||||
|
feature}
|
||||||
|
Specifies the name of the Python 2.x home directory. When 'pythonhome'
|
||||||
|
and the PYTHONHOME environment variable are not set, PYTHON_HOME,
|
||||||
|
which was specified at compile time, will be used for the Python 2.x
|
||||||
|
home directory.
|
||||||
|
Environment variables are expanded |:set_env|.
|
||||||
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
*'pythonthreedll'*
|
*'pythonthreedll'*
|
||||||
@@ -5977,6 +5991,20 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
DYNAMIC_PYTHON3_DLL, which was specified at compile time.
|
DYNAMIC_PYTHON3_DLL, which was specified at compile time.
|
||||||
Environment variables are expanded |:set_env|.
|
Environment variables are expanded |:set_env|.
|
||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
|
security reasons.
|
||||||
|
|
||||||
|
*'pythonthreehome'*
|
||||||
|
'pythonthreehome' string (default "")
|
||||||
|
global
|
||||||
|
{not in Vi}
|
||||||
|
{only available when compiled with the |+python3/dyn|
|
||||||
|
feature}
|
||||||
|
Specifies the name of the Python 3 home directory. When
|
||||||
|
'pythonthreehome' and the PYTHONHOME environment variable are not set,
|
||||||
|
PYTHON3_HOME, which was specified at compile time, will be used for
|
||||||
|
the Python 3 home directory.
|
||||||
|
Environment variables are expanded |:set_env|.
|
||||||
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
*'pyxversion'* *'pyx'*
|
*'pyxversion'* *'pyx'*
|
||||||
|
@@ -839,7 +839,9 @@ Short explanation of each option: *option-list*
|
|||||||
'prompt' 'prompt' enable prompt in Ex mode
|
'prompt' 'prompt' enable prompt in Ex mode
|
||||||
'pumheight' 'ph' maximum height of the popup menu
|
'pumheight' 'ph' maximum height of the popup menu
|
||||||
'pythondll' name of the Python 2 dynamic library
|
'pythondll' name of the Python 2 dynamic library
|
||||||
|
'pythonhome' name of the Python 2 home directory
|
||||||
'pythonthreedll' name of the Python 3 dynamic library
|
'pythonthreedll' name of the Python 3 dynamic library
|
||||||
|
'pythonthreehome' name of the Python 3 home directory
|
||||||
'pyxversion' 'pyx' Python version used for pyx* commands
|
'pyxversion' 'pyx' Python version used for pyx* commands
|
||||||
'quoteescape' 'qe' escape characters used in a string
|
'quoteescape' 'qe' escape characters used in a string
|
||||||
'readonly' 'ro' disallow writing the buffer
|
'readonly' 'ro' disallow writing the buffer
|
||||||
|
@@ -1354,10 +1354,18 @@ if exists("&pythondll")
|
|||||||
call append("$", "pythondll\tname of the Python 2 dynamic library")
|
call append("$", "pythondll\tname of the Python 2 dynamic library")
|
||||||
call <SID>OptionG("pythondll", &pythondll)
|
call <SID>OptionG("pythondll", &pythondll)
|
||||||
endif
|
endif
|
||||||
|
if exists("&pythonhome")
|
||||||
|
call append("$", "pythonhome\tname of the Python 2 home directory")
|
||||||
|
call <SID>OptionG("pythonhome", &pythonhome)
|
||||||
|
endif
|
||||||
if exists("&pythonthreedll")
|
if exists("&pythonthreedll")
|
||||||
call append("$", "pythonthreedll\tname of the Python 3 dynamic library")
|
call append("$", "pythonthreedll\tname of the Python 3 dynamic library")
|
||||||
call <SID>OptionG("pythonthreedll", &pythonthreedll)
|
call <SID>OptionG("pythonthreedll", &pythonthreedll)
|
||||||
endif
|
endif
|
||||||
|
if exists("&pythonthreehome")
|
||||||
|
call append("$", "pythonthreehome\tname of the Python 3 home directory")
|
||||||
|
call <SID>OptionG("pythonthreehome", &pythonthreehome)
|
||||||
|
endif
|
||||||
if exists("&rubydll")
|
if exists("&rubydll")
|
||||||
call append("$", "rubydll\tname of the Ruby dynamic library")
|
call append("$", "rubydll\tname of the Ruby dynamic library")
|
||||||
call <SID>OptionG("rubydll", &rubydll)
|
call <SID>OptionG("rubydll", &rubydll)
|
||||||
|
@@ -912,6 +912,8 @@ python_loaded(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static char *py_home_buf = NULL;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Python_Init(void)
|
Python_Init(void)
|
||||||
{
|
{
|
||||||
@@ -929,10 +931,15 @@ Python_Init(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (*p_pyhome != NUL)
|
||||||
|
{
|
||||||
|
/* The string must not change later, make a copy in static memory. */
|
||||||
|
py_home_buf = (char *)vim_strsave(p_pyhome);
|
||||||
|
if (py_home_buf != NULL)
|
||||||
|
Py_SetPythonHome(py_home_buf);
|
||||||
|
}
|
||||||
#ifdef PYTHON_HOME
|
#ifdef PYTHON_HOME
|
||||||
# ifdef DYNAMIC_PYTHON
|
else if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
|
||||||
if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
|
|
||||||
# endif
|
|
||||||
Py_SetPythonHome(PYTHON_HOME);
|
Py_SetPythonHome(PYTHON_HOME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -842,6 +842,8 @@ python3_loaded(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static wchar_t *py_home_buf = NULL;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Python3_Init(void)
|
Python3_Init(void)
|
||||||
{
|
{
|
||||||
@@ -857,11 +859,18 @@ Python3_Init(void)
|
|||||||
|
|
||||||
init_structs();
|
init_structs();
|
||||||
|
|
||||||
|
if (*p_py3home != NUL)
|
||||||
|
{
|
||||||
|
size_t len = mbstowcs(NULL, (char *)p_py3home, 0) + 1;
|
||||||
|
|
||||||
|
/* The string must not change later, make a copy in static memory. */
|
||||||
|
py_home_buf = (wchar_t *)alloc(len * sizeof(wchar_t));
|
||||||
|
if (py_home_buf != NULL && mbstowcs(
|
||||||
|
py_home_buf, (char *)p_py3home, len) != (size_t)-1)
|
||||||
|
Py_SetPythonHome(py_home_buf);
|
||||||
|
}
|
||||||
#ifdef PYTHON3_HOME
|
#ifdef PYTHON3_HOME
|
||||||
# ifdef DYNAMIC_PYTHON3
|
else if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
|
||||||
if (mch_getenv((char_u *)"PYTHONHOME") == NULL)
|
|
||||||
# endif
|
|
||||||
Py_SetPythonHome(PYTHON3_HOME);
|
Py_SetPythonHome(PYTHON3_HOME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
18
src/option.c
18
src/option.c
@@ -2246,6 +2246,15 @@ static struct vimoption options[] =
|
|||||||
#else
|
#else
|
||||||
(char_u *)NULL, PV_NONE,
|
(char_u *)NULL, PV_NONE,
|
||||||
{(char_u *)NULL, (char_u *)0L}
|
{(char_u *)NULL, (char_u *)0L}
|
||||||
|
#endif
|
||||||
|
SCRIPTID_INIT},
|
||||||
|
{"pythonthreehome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
|
||||||
|
#if defined(FEAT_PYTHON3)
|
||||||
|
(char_u *)&p_py3home, PV_NONE,
|
||||||
|
{(char_u *)"", (char_u *)0L}
|
||||||
|
#else
|
||||||
|
(char_u *)NULL, PV_NONE,
|
||||||
|
{(char_u *)NULL, (char_u *)0L}
|
||||||
#endif
|
#endif
|
||||||
SCRIPTID_INIT},
|
SCRIPTID_INIT},
|
||||||
{"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
|
{"pythondll", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
|
||||||
@@ -2255,6 +2264,15 @@ static struct vimoption options[] =
|
|||||||
#else
|
#else
|
||||||
(char_u *)NULL, PV_NONE,
|
(char_u *)NULL, PV_NONE,
|
||||||
{(char_u *)NULL, (char_u *)0L}
|
{(char_u *)NULL, (char_u *)0L}
|
||||||
|
#endif
|
||||||
|
SCRIPTID_INIT},
|
||||||
|
{"pythonhome", NULL, P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
|
||||||
|
#if defined(FEAT_PYTHON)
|
||||||
|
(char_u *)&p_pyhome, PV_NONE,
|
||||||
|
{(char_u *)"", (char_u *)0L}
|
||||||
|
#else
|
||||||
|
(char_u *)NULL, PV_NONE,
|
||||||
|
{(char_u *)NULL, (char_u *)0L}
|
||||||
#endif
|
#endif
|
||||||
SCRIPTID_INIT},
|
SCRIPTID_INIT},
|
||||||
{"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
|
{"pyxversion", "pyx", P_NUM|P_VI_DEF|P_SECURE,
|
||||||
|
@@ -696,9 +696,15 @@ EXTERN char_u *p_perldll; /* 'perldll' */
|
|||||||
#if defined(DYNAMIC_PYTHON3)
|
#if defined(DYNAMIC_PYTHON3)
|
||||||
EXTERN char_u *p_py3dll; /* 'pythonthreedll' */
|
EXTERN char_u *p_py3dll; /* 'pythonthreedll' */
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_PYTHON3
|
||||||
|
EXTERN char_u *p_py3home; /* 'pythonthreehome' */
|
||||||
|
#endif
|
||||||
#if defined(DYNAMIC_PYTHON)
|
#if defined(DYNAMIC_PYTHON)
|
||||||
EXTERN char_u *p_pydll; /* 'pythondll' */
|
EXTERN char_u *p_pydll; /* 'pythondll' */
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_PYTHON
|
||||||
|
EXTERN char_u *p_pyhome; /* 'pythonhome' */
|
||||||
|
#endif
|
||||||
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
|
||||||
EXTERN long p_pyx; /* 'pyxversion' */
|
EXTERN long p_pyx; /* 'pyxversion' */
|
||||||
#endif
|
#endif
|
||||||
|
@@ -771,6 +771,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1451,
|
||||||
/**/
|
/**/
|
||||||
1450,
|
1450,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user