|
- Don't copy the whole /bin when symlinking.
- Also provide python3.exe for backwards compat.
- Unset MSYSTEM, to fix some path comparisons due to os.sep differences.
- Skip some msvc build specifics
- diff -Naur Python-3.8.0-orig/Lib/venv/__init__.py Python-3.8.0/Lib/venv/__init__.py
- --- Python-3.8.0-orig/Lib/venv/__init__.py 2019-10-22 10:05:21.691201800 +0300
- +++ Python-3.8.0/Lib/venv/__init__.py 2019-10-22 10:05:25.591208600 +0300
- @@ -11,6 +11,7 @@
- import sys
- import sysconfig
- import types
- +from sysconfig import _POSIX_BUILD
-
- logger = logging.getLogger(__name__)
-
- @@ -110,7 +111,7 @@
- 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')
- @@ -244,7 +244,7 @@
- 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
- @@ -266,7 +267,13 @@
- 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:
- @@ -285,9 +285,11 @@
- # 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):
- """
|