#!/usr/bin/env python3import argparseimport osimport pathlibimport zipfilefrom urllib.request import urlretrievedef 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 = Noneif verbose:reporthook = printzip_dir.mkdir(parents=True, exist_ok=True)filename, headers = urlretrieve(url,zip_dir / f'{commit_hash}.zip',reporthook=reporthook,)return filenamedef 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.tagextract_zip(args.externals_dir, zip_path).replace(final_name)if __name__ == '__main__':main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。