Introducing python virtualenv configuration.
New parameter 'home' for python application allows to configure application-specific virtualenv path. This closes #15 issue on GitHub.
This commit is contained in:
@@ -34,6 +34,7 @@ typedef struct nxt_common_app_conf_s nxt_common_app_conf_t;
|
|||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
char *home;
|
||||||
nxt_str_t path;
|
nxt_str_t path;
|
||||||
nxt_str_t module;
|
nxt_str_t module;
|
||||||
} nxt_python_app_conf_t;
|
} nxt_python_app_conf_t;
|
||||||
|
|||||||
@@ -118,6 +118,11 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL },
|
NULL },
|
||||||
|
|
||||||
|
{ nxt_string("home"),
|
||||||
|
NXT_CONF_STRING,
|
||||||
|
NULL,
|
||||||
|
NULL },
|
||||||
|
|
||||||
{ nxt_string("path"),
|
{ nxt_string("path"),
|
||||||
NXT_CONF_STRING,
|
NXT_CONF_STRING,
|
||||||
NULL,
|
NULL,
|
||||||
@@ -545,3 +550,5 @@ nxt_conf_vldt_group(nxt_conf_validation_t *vldt, char *group)
|
|||||||
|
|
||||||
return NXT_ERROR;
|
return NXT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -120,6 +120,12 @@ static nxt_conf_map_t nxt_common_app_conf[] = {
|
|||||||
offsetof(nxt_common_app_conf_t, workers),
|
offsetof(nxt_common_app_conf_t, workers),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
nxt_string("home"),
|
||||||
|
NXT_CONF_MAP_CSTRZ,
|
||||||
|
offsetof(nxt_common_app_conf_t, u.python.home),
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
nxt_string("path"),
|
nxt_string("path"),
|
||||||
NXT_CONF_MAP_STR,
|
NXT_CONF_MAP_STR,
|
||||||
|
|||||||
@@ -177,6 +177,12 @@ static PyObject *nxt_py_application;
|
|||||||
static PyObject *nxt_py_start_resp_obj;
|
static PyObject *nxt_py_start_resp_obj;
|
||||||
static PyObject *nxt_py_environ_ptyp;
|
static PyObject *nxt_py_environ_ptyp;
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION == 3
|
||||||
|
static wchar_t *nxt_py_home;
|
||||||
|
#else
|
||||||
|
static char *nxt_py_home;
|
||||||
|
#endif
|
||||||
|
|
||||||
static nxt_python_run_ctx_t *nxt_python_run_ctx;
|
static nxt_python_run_ctx_t *nxt_python_run_ctx;
|
||||||
|
|
||||||
|
|
||||||
@@ -194,6 +200,26 @@ nxt_python_init(nxt_task_t *task, nxt_common_app_conf_t *conf)
|
|||||||
return NXT_ERROR;
|
return NXT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->home != NULL) {
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = nxt_strlen(c->home);
|
||||||
|
|
||||||
|
nxt_py_home = nxt_malloc(sizeof(*nxt_py_home) * (len + 1));
|
||||||
|
if (nxt_slow_path(nxt_py_home == NULL)) {
|
||||||
|
nxt_log_emerg(task->log, "Failed to allocate buffer for home path");
|
||||||
|
return NXT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION == 3
|
||||||
|
mbstowcs(nxt_py_home, c->home, len + 1);
|
||||||
|
#else
|
||||||
|
nxt_memcpy(nxt_py_home, c->home, len + 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Py_SetPythonHome(nxt_py_home);
|
||||||
|
}
|
||||||
|
|
||||||
Py_InitializeEx(0);
|
Py_InitializeEx(0);
|
||||||
|
|
||||||
obj = NULL;
|
obj = NULL;
|
||||||
@@ -301,6 +327,10 @@ fail:
|
|||||||
Py_XDECREF(obj);
|
Py_XDECREF(obj);
|
||||||
Py_XDECREF(module);
|
Py_XDECREF(module);
|
||||||
|
|
||||||
|
if (nxt_py_home != NULL) {
|
||||||
|
nxt_free(nxt_py_home);
|
||||||
|
}
|
||||||
|
|
||||||
return NXT_ERROR;
|
return NXT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user