| 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 |
| |