mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
bpo-37672: Switch Windows Store package to use pip.ini for user mode (GH-14939)
This commit is contained in:
parent
e018dc52d1
commit
123536fdab
4 changed files with 50 additions and 35 deletions
|
@ -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:
|
if ns.include_pip:
|
||||||
for dest, src in get_pip_layout(ns):
|
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
|
src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB
|
||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -33,7 +33,11 @@ def get_pip_layout(ns):
|
||||||
pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
|
pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
|
||||||
for dest, src in rglob(pip_dir, "**/*"):
|
for dest, src in rglob(pip_dir, "**/*"):
|
||||||
yield pkg_root.format(dest), src
|
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):
|
def extract_pip_files(ns):
|
||||||
|
|
|
@ -122,6 +122,12 @@ set_process_name(PyConfig *config)
|
||||||
break;
|
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()) {
|
if (!home.empty()) {
|
||||||
|
@ -163,11 +169,30 @@ wmain(int argc, wchar_t **argv)
|
||||||
PyPreConfig preconfig;
|
PyPreConfig preconfig;
|
||||||
PyConfig config;
|
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);
|
PyPreConfig_InitPythonConfig(&preconfig);
|
||||||
|
if (!moduleName) {
|
||||||
status = Py_PreInitializeFromArgs(&preconfig, argc, argv);
|
status = Py_PreInitializeFromArgs(&preconfig, argc, argv);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
goto fail_without_config;
|
goto fail_without_config;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
status = PyConfig_InitPythonConfig(&config);
|
status = PyConfig_InitPythonConfig(&config);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
|
@ -178,35 +203,20 @@ wmain(int argc, wchar_t **argv)
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
if (moduleName) {
|
||||||
|
config.parse_argv = 0;
|
||||||
|
}
|
||||||
|
|
||||||
status = set_process_name(&config);
|
status = set_process_name(&config);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wchar_t *p = _wgetenv(L"PYTHONUSERBASE");
|
p = _wgetenv(L"PYTHONUSERBASE");
|
||||||
if (!p || !*p) {
|
if (!p || !*p) {
|
||||||
_wputenv_s(L"PYTHONUSERBASE", get_user_base().c_str());
|
_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++;
|
|
||||||
}
|
|
||||||
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (moduleName) {
|
if (moduleName) {
|
||||||
status = PyConfig_SetString(&config, &config.run_module, moduleName);
|
status = PyConfig_SetString(&config, &config.run_module, moduleName);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
|
@ -221,7 +231,6 @@ wmain(int argc, wchar_t **argv)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
status = Py_InitializeFromConfig(&config);
|
status = Py_InitializeFromConfig(&config);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue