summarylogtreecommitdiffstats
path: root/0084-venv-creation-fixes.patch
blob: 1b84a22799705c583be0fe656eb6a9bf8ab38454 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From eb0b0f383d56454cc6fde8f19ea056bf5bed75ce Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Thu, 17 Jun 2021 18:52:26 +0530
Subject: [PATCH 084/N] venv creation fixes

---
 Lib/venv/__init__.py | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index 8009deb..b471006 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -11,6 +11,7 @@ import subprocess
 import sys
 import sysconfig
 import types
+from sysconfig import _POSIX_BUILD
 
 
 CORE_VENV_DEPS = ('pip', 'setuptools')
@@ -119,7 +120,7 @@ class EnvBuilder:
         context.executable = executable
         context.python_dir = dirname
         context.python_exe = exename
-        if sys.platform == 'win32':
+        if sys.platform == 'win32' and not _POSIX_BUILD:
             binname = 'Scripts'
             incpath = 'Include'
             libpath = os.path.join(env_dir, 'Lib', 'site-packages')
@@ -252,7 +253,7 @@ class EnvBuilder:
                     if not os.path.islink(path):
                         os.chmod(path, 0o755)
         else:
-            if self.symlinks:
+            if self.symlinks and not _POSIX_BUILD:
                 # For symlinking, we need a complete copy of the root directory
                 # If symlinks fail, you'll get unnecessary copies of files, but
                 # we assume that if you've opted into symlinks on Windows then
@@ -275,7 +276,13 @@ class EnvBuilder:
                 if os.path.lexists(src):
                     copier(src, os.path.join(binpath, suffix))
 
-            if sysconfig.is_python_build(True):
+            if _POSIX_BUILD:
+                # copy from python/pythonw so the venvlauncher magic in symlink_or_copy triggers
+                copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python3.exe'))
+                copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python%d.%d.exe' % sys.version_info[:2]))
+                copier(os.path.join(dirname, 'pythonw.exe'), os.path.join(binpath, 'python3w.exe'))
+
+            if sysconfig.is_python_build(True) and not _POSIX_BUILD:
                 # copy init.tcl
                 for root, dirs, files in os.walk(context.python_dir):
                     if 'init.tcl' in files:
@@ -293,9 +300,11 @@ class EnvBuilder:
         # We run ensurepip in isolated mode to avoid side effects from
         # environment vars, the current directory and anything else
         # intended for the global Python environment
+        env = os.environ.copy()
+        env.pop("MSYSTEM", None)
         cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade',
-                                                    '--default-pip']
-        subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+               '--default-pip']
+        subprocess.check_call(cmd, stderr=subprocess.STDOUT, env=env)
 
     def setup_scripts(self, context):
         """
-- 
2.32.0