bpo-37672: Switch Windows Store package to use pip.ini for user mode (GH-14939)
This commit is contained in:
parent
e018dc52d1
commit
123536fdab
|
@ -0,0 +1,2 @@
|
|||
Switch Windows Store package's pip to use bundled :file:`pip.ini` instead of
|
||||
:envvar:`PIP_USER` variable.
|
|
@ -228,7 +228,7 @@ def get_layout(ns):
|
|||
|
||||
if ns.include_pip:
|
||||
for dest, src in get_pip_layout(ns):
|
||||
if isinstance(src, tuple) or not (
|
||||
if not isinstance(src, tuple) and (
|
||||
src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB
|
||||
):
|
||||
continue
|
||||
|
|
|
@ -33,7 +33,11 @@ def get_pip_layout(ns):
|
|||
pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
|
||||
for dest, src in rglob(pip_dir, "**/*"):
|
||||
yield pkg_root.format(dest), src
|
||||
yield "pip.ini", ("pip.ini", b"[global]\nuser=yes")
|
||||
content = "\n".join(
|
||||
"[{}]\nuser=yes".format(n)
|
||||
for n in ["install", "uninstall", "freeze", "list"]
|
||||
)
|
||||
yield "pip.ini", ("pip.ini", content.encode())
|
||||
|
||||
|
||||
def extract_pip_files(ns):
|
||||
|
|
|
@ -122,6 +122,12 @@ set_process_name(PyConfig *config)
|
|||
break;
|
||||
}
|
||||
}
|
||||
size_t i = executable.find_last_of(L"/\\");
|
||||
if (i == std::wstring::npos) {
|
||||
executable = PROGNAME;
|
||||
} else {
|
||||
executable.replace(i + 1, std::wstring::npos, PROGNAME);
|
||||
}
|
||||
}
|
||||
|
||||
if (!home.empty()) {
|
||||
|
@ -163,10 +169,29 @@ wmain(int argc, wchar_t **argv)
|
|||
PyPreConfig preconfig;
|
||||
PyConfig config;
|
||||
|
||||
const wchar_t *moduleName = NULL;
|
||||
const wchar_t *p = wcsrchr(argv[0], L'\\');
|
||||
if (!p) {
|
||||
p = argv[0];
|
||||
}
|
||||
if (p) {
|
||||
if (*p == L'\\') {
|
||||
p++;
|
||||
}
|
||||
|
||||
if (wcsnicmp(p, L"pip", 3) == 0) {
|
||||
moduleName = L"pip";
|
||||
} else if (wcsnicmp(p, L"idle", 4) == 0) {
|
||||
moduleName = L"idlelib";
|
||||
}
|
||||
}
|
||||
|
||||
PyPreConfig_InitPythonConfig(&preconfig);
|
||||
status = Py_PreInitializeFromArgs(&preconfig, argc, argv);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail_without_config;
|
||||
if (!moduleName) {
|
||||
status = Py_PreInitializeFromArgs(&preconfig, argc, argv);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail_without_config;
|
||||
}
|
||||
}
|
||||
|
||||
status = PyConfig_InitPythonConfig(&config);
|
||||
|
@ -178,48 +203,32 @@ wmain(int argc, wchar_t **argv)
|
|||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
if (moduleName) {
|
||||
config.parse_argv = 0;
|
||||
}
|
||||
|
||||
status = set_process_name(&config);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
const wchar_t *p = _wgetenv(L"PYTHONUSERBASE");
|
||||
p = _wgetenv(L"PYTHONUSERBASE");
|
||||
if (!p || !*p) {
|
||||
_wputenv_s(L"PYTHONUSERBASE", get_user_base().c_str());
|
||||
}
|
||||
|
||||
p = wcsrchr(argv[0], L'\\');
|
||||
if (!p) {
|
||||
p = argv[0];
|
||||
}
|
||||
if (p) {
|
||||
if (*p == L'\\') {
|
||||
p++;
|
||||
if (moduleName) {
|
||||
status = PyConfig_SetString(&config, &config.run_module, moduleName);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
const wchar_t *moduleName = NULL;
|
||||
if (wcsnicmp(p, L"pip", 3) == 0) {
|
||||
moduleName = L"pip";
|
||||
/* No longer required when pip 19.1 is added */
|
||||
_wputenv_s(L"PIP_USER", L"true");
|
||||
} else if (wcsnicmp(p, L"idle", 4) == 0) {
|
||||
moduleName = L"idlelib";
|
||||
status = PyConfig_SetString(&config, &config.run_filename, NULL);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (moduleName) {
|
||||
status = PyConfig_SetString(&config, &config.run_module, moduleName);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
status = PyConfig_SetString(&config, &config.run_filename, NULL);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
status = PyConfig_SetString(&config, &config.run_command, NULL);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
status = PyConfig_SetString(&config, &config.run_command, NULL);
|
||||
if (PyStatus_Exception(status)) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue