New submission from STINNER Victor <vstin...@redhat.com>:
The read_pth_file() of PC/getpathp.c sets Py_IsolatedFlag and Py_NoSiteFlag to 1 in Python 3.6. calculate_path() checked if a file with a "._pth" extension exists in "dllpath" or "progpath". I refactored deeply the Python initialization in Python 3.7 and I'm not sure I introduced a regression or not. In Python 3.7, _PyCoreConfig_Read() calls config_init_path_config() which indirectly calls read_pth_file(). pymain_read_conf_impl() detects if Py_IsolatedFlag and Py_NoSiteFlag have been modified and store the new value in cmdline->isolated and cmdline->no_site_import. Later, cmdline_set_global_config() sets Py_IsolatedFlag and Py_NoSiteFlag; and _PyCoreConfig_SetGlobalConfig() sets Py_IgnoreEnvironmentFlag. The problem is the relationship between isolated/cmdline.Py_IsolatedFlag, no_site_import/cmdline.Py_NoSiteFlag and Py_IgnoreEnvironmentFlag/config.ignore_environment. The isolated mode must set Py_NoSiteFlag to 1 and Py_IgnoreEnvironmentFlag to 1. For example, pymain_read_conf_impl() uses: /* Set Py_IgnoreEnvironmentFlag for Py_GETENV() */ Py_IgnoreEnvironmentFlag = config->ignore_environment || cmdline->isolated; But it's done before calling _PyCoreConfig_Read(). Moreover, _PyCoreConfig_Read() reads PYTHONxxx environment variables before calling indirectly read_pth_file(), and so PYTHONxxx env vars are read whereas they are supposed to be ignored. Calling read_pth_file() earlier is challenging since it depends on configuration parameters which are before calling it. At the end, I'm not sure if it's a real issue. I'm not sure if there is a regression in Python 3.7. -- But the code in Python 3.8 changed a lot again: _PyCoreConfig_Read() is now responsible to read all environment variables. In Python 3.8, read_pth_file() uses a _PyPathConfig structure to set isolated and site_import parameters. These parameters are then copied to _PyCoreConfig in _PyCoreConfig_CalculatePathConfig(). Moreover, _PyCoreConfig_Read() is more explicit with the relationship between isolated, use_environment and user_site_directory. The function *starts* with: if (config->isolated > 0) { config->use_environment = 0; config->user_site_directory = 0; } Problems (inconsistencies) arise if isolated is set from 0 to 1 after this code. ---------- components: Interpreter Core messages: 336760 nosy: vstinner priority: normal severity: normal status: open title: Windows: python._pth sets isolated mode late during Python initialization versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue36136> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com