diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-07-24 11:55:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-24 11:55:48 (GMT) |
commit | d19d8d5279f156bc8f6736b5f16f069879b9519b (patch) | |
tree | dc3c2561371a0be4410172fe4270a37ab7c76ba6 /Include | |
parent | ac0b3c2f4d86fc056b833a4e6b9a380741244a63 (diff) | |
download | cpython-d19d8d5279f156bc8f6736b5f16f069879b9519b.zip cpython-d19d8d5279f156bc8f6736b5f16f069879b9519b.tar.gz cpython-d19d8d5279f156bc8f6736b5f16f069879b9519b.tar.bz2 |
bpo-34170: Add _PyCoreConfig.isolated (GH-8417)
* _PyCoreConfig: add isolated and site_import attributes
* Replace Py_IgnoreEnvironment with config->ignore_environment when
reading the current configuration
* _PyCoreConfig_Read() now sets ignore_environment, utf8_mode,
isolated and site_import from Py_IgnoreEnvironment, Py_UTF8Mode,
Py_IsolatedFlag and Py_NoSiteFlag
* _Py_InitializeCore() now sets Py_xxx flags from the configuration
* pymain_read_conf() now uses _PyCoreConfig_Copy() to save/restore
the configuration.
* Rename _disable_importlib of _PyCoreConfig to _install_importlib
* _PyCoreConfig_SetGlobalConfig() now also set
Py_HashRandomizationFlag
* Replace !Py_NoSiteFlag with core_config->site_import
Diffstat (limited to 'Include')
-rw-r--r-- | Include/internal/pystate.h | 6 | ||||
-rw-r--r-- | Include/pylifecycle.h | 12 | ||||
-rw-r--r-- | Include/pystate.h | 32 |
3 files changed, 35 insertions, 15 deletions
diff --git a/Include/internal/pystate.h b/Include/internal/pystate.h index 6cee272..e041d37 100644 --- a/Include/internal/pystate.h +++ b/Include/internal/pystate.h @@ -52,17 +52,17 @@ typedef struct _PyPathConfig { wchar_t *program_name; /* Set by Py_SetPythonHome() or PYTHONHOME environment variable */ wchar_t *home; - /* isolated and no_site_import are used to set Py_IsolatedFlag and + /* isolated and site_import are used to set Py_IsolatedFlag and Py_NoSiteFlag flags on Windows in read_pth_file(). These fields are ignored when their value are equal to -1 (unset). */ int isolated; - int no_site_import; + int site_import; } _PyPathConfig; #define _PyPathConfig_INIT \ {.module_search_path = NULL, \ .isolated = -1, \ - .no_site_import = -1} + .site_import = -1} /* Note: _PyPathConfig_INIT sets other fields to 0/NULL */ PyAPI_DATA(_PyPathConfig) _Py_path_config; diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h index 2fbc4f9..3e43a98 100644 --- a/Include/pylifecycle.h +++ b/Include/pylifecycle.h @@ -54,20 +54,16 @@ PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding, PyAPI_FUNC(_PyInitError) _Py_InitializeCore(const _PyCoreConfig *); PyAPI_FUNC(int) _Py_IsCoreInitialized(void); -PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read( - _PyCoreConfig *config, - int *isolated, - int *no_site_import); +PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config); PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *); PyAPI_FUNC(int) _PyCoreConfig_Copy( _PyCoreConfig *config, const _PyCoreConfig *config2); -PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig( - _PyCoreConfig *config, - int *isolated, - int *no_site_import); +PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config); PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig( const _PyCoreConfig *config); +PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(const _PyCoreConfig *config); + PyAPI_FUNC(_PyInitError) _PyMainInterpreterConfig_Read( _PyMainInterpreterConfig *config, diff --git a/Include/pystate.h b/Include/pystate.h index ac09dc3..609f9c6 100644 --- a/Include/pystate.h +++ b/Include/pystate.h @@ -28,7 +28,7 @@ typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int); typedef struct { int install_signal_handlers; /* Install signal handlers? -1 means unset */ - int ignore_environment; /* -E, Py_IgnoreEnvironmentFlag */ + int ignore_environment; /* -E, Py_IgnoreEnvironmentFlag, -1 means unset */ int use_hash_seed; /* PYTHONHASHSEED=x */ unsigned long hash_seed; const char *allocator; /* Memory allocator: _PyMem_SetupAllocators() */ @@ -75,18 +75,42 @@ typedef struct { wchar_t *dll_path; /* Windows DLL path */ #endif - /* Private fields */ - int _disable_importlib; /* Needed by freeze_importlib */ + /* If greater than 0, enable isolated mode: sys.path contains + neither the script's directory nor the user's site-packages directory. + + Set to 1 by the -I command line option. If set to -1 (default), inherit + Py_IsolatedFlag value. */ + int isolated; + + /* If equal to zero, disable the import of the module site and the + site-dependent manipulations of sys.path that it entails. Also disable + these manipulations if site is explicitly imported later (call + site.main() if you want them to be triggered). + + Set to 0 by the -S command line option. If set to -1 (default), set to + the negative value of Py_NoSiteFlag. */ + int site_import; + + /* --- Private fields -------- */ + + /* Install importlib? If set to 0, importlib is not initialized at all. + Needed by freeze_importlib: see install_importlib argument of + _Py_InitializeEx_Private(). */ + int _install_importlib; } _PyCoreConfig; #define _PyCoreConfig_INIT \ (_PyCoreConfig){ \ .install_signal_handlers = -1, \ + .ignore_environment = -1, \ .use_hash_seed = -1, \ .coerce_c_locale = -1, \ .utf8_mode = -1, \ .argc = -1, \ - .nmodule_search_path = -1} + .nmodule_search_path = -1, \ + .isolated = -1, \ + .site_import = -1, \ + ._install_importlib = 1} /* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */ /* Placeholders while working on the new configuration API |