mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-99204: Calculate base_executable by alternate names in POSIX venvs (GH-99206)
Check to see if `base_executable` exists. If it does not, attempt to use known alternative names of the python binary to find an executable in the path specified by `home`. If no alternative is found, previous behavior is preserved. Signed-off-by: Vincent Fazio <vfazio@gmail.com> Signed-off-by: Vincent Fazio <vfazio@gmail.com>
This commit is contained in:
		
							parent
							
								
									f1680c3fbf
								
							
						
					
					
						commit
						c41b13d39c
					
				
					 3 changed files with 54 additions and 0 deletions
				
			
		|  | @ -375,6 +375,25 @@ def search_up(prefix, *landmarks, test=isfile): | |||
|                     pass | ||||
|                 if not base_executable: | ||||
|                     base_executable = joinpath(executable_dir, basename(executable)) | ||||
|                     # It's possible "python" is executed from within a posix venv but that | ||||
|                     # "python" is not available in the "home" directory as the standard | ||||
|                     # `make install` does not create it and distros often do not provide it. | ||||
|                     # | ||||
|                     # In this case, try to fall back to known alternatives | ||||
|                     if os_name != 'nt' and not isfile(base_executable): | ||||
|                         base_exe = basename(executable) | ||||
|                         for candidate in (DEFAULT_PROGRAM_NAME, f'python{VERSION_MAJOR}.{VERSION_MINOR}'): | ||||
|                             candidate += EXE_SUFFIX if EXE_SUFFIX else '' | ||||
|                             if base_exe == candidate: | ||||
|                                 continue | ||||
|                             candidate = joinpath(executable_dir, candidate) | ||||
|                             # Only set base_executable if the candidate exists. | ||||
|                             # If no candidate succeeds, subsequent errors related to | ||||
|                             # base_executable (like FileNotFoundError) remain in the | ||||
|                             # context of the original executable name | ||||
|                             if isfile(candidate): | ||||
|                                 base_executable = candidate | ||||
|                                 break | ||||
|             break | ||||
|     else: | ||||
|         venv_prefix = None | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vincent Fazio
						Vincent Fazio