]> granicus.if.org Git - python/commitdiff
bpo-37672: Switch Windows Store package to use pip.ini for user mode (GH-14939)
authorSteve Dower <steve.dower@python.org>
Wed, 24 Jul 2019 22:13:22 +0000 (15:13 -0700)
committerGitHub <noreply@github.com>
Wed, 24 Jul 2019 22:13:22 +0000 (15:13 -0700)
Misc/NEWS.d/next/Windows/2019-07-24-14-36-28.bpo-37672.uKEVHN.rst [new file with mode: 0644]
PC/layout/main.py
PC/layout/support/pip.py
PC/python_uwp.cpp

diff --git a/Misc/NEWS.d/next/Windows/2019-07-24-14-36-28.bpo-37672.uKEVHN.rst b/Misc/NEWS.d/next/Windows/2019-07-24-14-36-28.bpo-37672.uKEVHN.rst
new file mode 100644 (file)
index 0000000..78b51c1
--- /dev/null
@@ -0,0 +1,2 @@
+Switch Windows Store package's pip to use bundled :file:`pip.ini` instead of
+:envvar:`PIP_USER` variable.
index c39aab208d3560c86f57d209bc66f4ab52abfc82..111f8aad2561dae6b6b74ff23897c59b79fddb35 100644 (file)
@@ -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
index eada456655eca7feff503075858d3fba699e9ced..4ad3b1dd5bc0fa205929c4ea9cc239929c73c94b 100644 (file)
@@ -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):
index 2352f45e8a3d2a196623519063b87b77873f70fb..06c1dd35365554b38c859bcf004985c6a268bf6f 100644 (file)
@@ -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;
         }
     }