mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 51599e2bdd
			
		
	
	
		51599e2bdd
		
	
	
	
	
		
			
			The Windows build now depends on Python 3.6 to fetch externals, but it will be downloaded via NuGet (which is downloaded via PowerShell) if it is not available via `py -3.6`. This means the only thing that must be installed on a modern Windows box to do a full build of CPython with all extensions is Visual Studio. Also fixes an outdated note about _lzma in PCbuild/readme.txt
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import argparse
 | |
| import os
 | |
| import pathlib
 | |
| import zipfile
 | |
| from urllib.request import urlretrieve
 | |
| 
 | |
| 
 | |
| def fetch_zip(commit_hash, zip_dir, *, org='python', binary=False, verbose):
 | |
|     repo = f'cpython-{"bin" if binary else "source"}-deps'
 | |
|     url = f'https://github.com/{org}/{repo}/archive/{commit_hash}.zip'
 | |
|     reporthook = None
 | |
|     if verbose:
 | |
|         reporthook = print
 | |
|     zip_dir.mkdir(parents=True, exist_ok=True)
 | |
|     filename, headers = urlretrieve(
 | |
|         url,
 | |
|         zip_dir / f'{commit_hash}.zip',
 | |
|         reporthook=reporthook,
 | |
|     )
 | |
|     return filename
 | |
| 
 | |
| 
 | |
| def extract_zip(externals_dir, zip_path):
 | |
|     with zipfile.ZipFile(os.fspath(zip_path)) as zf:
 | |
|         zf.extractall(os.fspath(externals_dir))
 | |
|         return externals_dir / zf.namelist()[0].split('/')[0]
 | |
| 
 | |
| 
 | |
| def parse_args():
 | |
|     p = argparse.ArgumentParser()
 | |
|     p.add_argument('-v', '--verbose', action='store_true')
 | |
|     p.add_argument('-b', '--binary', action='store_true',
 | |
|                    help='Is the dependency in the binary repo?')
 | |
|     p.add_argument('-O', '--organization',
 | |
|                    help='Organization owning the deps repos', default='python')
 | |
|     p.add_argument('-e', '--externals-dir', type=pathlib.Path,
 | |
|                    help='Directory in which to store dependencies',
 | |
|                    default=pathlib.Path(__file__).parent.parent / 'externals')
 | |
|     p.add_argument('tag',
 | |
|                    help='tag of the dependency')
 | |
|     return p.parse_args()
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     args = parse_args()
 | |
|     zip_path = fetch_zip(
 | |
|         args.tag,
 | |
|         args.externals_dir / 'zips',
 | |
|         org=args.organization,
 | |
|         binary=args.binary,
 | |
|         verbose=args.verbose,
 | |
|     )
 | |
|     final_name = args.externals_dir / args.tag
 | |
|     extract_zip(args.externals_dir, zip_path).replace(final_name)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     main()
 |