mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Issue #23399: pyvenv creates relative symlinks where possible.
This commit is contained in:
		
							parent
							
								
									b51813403f
								
							
						
					
					
						commit
						581c29f8fe
					
				
					 2 changed files with 10 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -141,10 +141,9 @@ class EnvBuilder:
 | 
			
		|||
        # Issue 21197: create lib64 as a symlink to lib on 64-bit non-OS X POSIX
 | 
			
		||||
        if ((sys.maxsize > 2**32) and (os.name == 'posix') and
 | 
			
		||||
            (sys.platform != 'darwin')):
 | 
			
		||||
            p = os.path.join(env_dir, 'lib')
 | 
			
		||||
            link_path = os.path.join(env_dir, 'lib64')
 | 
			
		||||
            if not os.path.exists(link_path):   # Issue #21643
 | 
			
		||||
                os.symlink(p, link_path)
 | 
			
		||||
                os.symlink('lib', link_path)
 | 
			
		||||
        context.bin_path = binpath = os.path.join(env_dir, binname)
 | 
			
		||||
        context.bin_name = binname
 | 
			
		||||
        context.env_exe = os.path.join(binpath, exename)
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +177,7 @@ class EnvBuilder:
 | 
			
		|||
                result = f.startswith('python') and f.endswith('.exe')
 | 
			
		||||
            return result
 | 
			
		||||
 | 
			
		||||
    def symlink_or_copy(self, src, dst):
 | 
			
		||||
    def symlink_or_copy(self, src, dst, relative_symlinks_ok=False):
 | 
			
		||||
        """
 | 
			
		||||
        Try symlinking a file, and if that fails, fall back to copying.
 | 
			
		||||
        """
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +185,11 @@ class EnvBuilder:
 | 
			
		|||
        if not force_copy:
 | 
			
		||||
            try:
 | 
			
		||||
                if not os.path.islink(dst): # can't link to itself!
 | 
			
		||||
                    os.symlink(src, dst)
 | 
			
		||||
                    if relative_symlinks_ok:
 | 
			
		||||
                        assert os.path.dirname(src) == os.path.dirname(dst)
 | 
			
		||||
                        os.symlink(os.path.basename(src), dst)
 | 
			
		||||
                    else:
 | 
			
		||||
                        os.symlink(src, dst)
 | 
			
		||||
            except Exception:   # may need to use a more specific exception
 | 
			
		||||
                logger.warning('Unable to symlink %r to %r', src, dst)
 | 
			
		||||
                force_copy = True
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +204,6 @@ class EnvBuilder:
 | 
			
		|||
                        being processed.
 | 
			
		||||
        """
 | 
			
		||||
        binpath = context.bin_path
 | 
			
		||||
        exename = context.python_exe
 | 
			
		||||
        path = context.env_exe
 | 
			
		||||
        copier = self.symlink_or_copy
 | 
			
		||||
        copier(context.executable, path)
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +216,7 @@ class EnvBuilder:
 | 
			
		|||
                if not os.path.exists(path):
 | 
			
		||||
                    # Issue 18807: make copies if
 | 
			
		||||
                    # symlinks are not wanted
 | 
			
		||||
                    copier(context.env_exe, path)
 | 
			
		||||
                    copier(context.env_exe, path, relative_symlinks_ok=True)
 | 
			
		||||
                    if not os.path.islink(path):
 | 
			
		||||
                        os.chmod(path, 0o755)
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,6 +59,8 @@ Core and Builtins
 | 
			
		|||
Library
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
- Issue #23399: pyvenv creates relative symlinks where possible.
 | 
			
		||||
 | 
			
		||||
- Issue #23099: Closing io.BytesIO with exported buffer is rejected now to
 | 
			
		||||
  prevent corrupting exported buffer.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue