還在為pip安裝發愁?whl自助腳本問世!

  • 2019 年 10 月 6 日
  • 筆記

還在為pip安裝發愁?whl自助腳本問世!

0.導語

在學習Python的過程中,大家肯定會遇到pip安裝失敗的問題,要麼是因為網速問題,要麼是因為win系統上與vs綁定,必須要裝vs等一些系列問題,而這些問題有個很關鍵的解決辦法,那就是直接下載相應的whl包來安裝。

所以,我就想到,如果有一個能夠支援搜索查找及下載whl包的腳本,那是不是很棒哦,果不其然,可以做到,讓我時刻想到需求來源於生活,技術用於提升工作效率!

昨日花了一會時間寫下這個腳本,並做了測試,今天來總結一下,歡迎大家star,fork,轉發,收藏本篇文章!

源碼地址(或者點擊閱讀原文):

https://github.com/Light-City/AutoDownloadWhl

本次腳本我將它命名為:Whl自助搜索下載器

實現了如下功能:

  • 支援檢索
  • 支援查找
  • 支援下載
  • 單、多文件下載

2.如何使用及功能演示

2.1 如何使用

運行腳本需要:

  • requests、lxml、os庫
  • curl或axel命令

win系統的直接下載win版本的按照網上配置即可!

linux系統與mac系統可用yum 或 apt 或 brew等來進行安裝!

複製源碼地址並下載腳本,運行腳本即可:

python AutoDownloadWhl.py  

2.2 功能演示

  • 所有包資訊展示
  • 適應平台whl包
  • 多包下載

完整演示如下:

3.程式碼詳解

3.1 封裝

封裝包地址與下載地址:

class AutoDownWhl():      def __init__(self):          # 包地址          self.url = 'https://www.lfd.uci.edu/~gohlke/pythonlibs/'          # 下載地址          self.base_url = 'https://download.lfd.uci.edu/pythonlibs/r5uhg2lo/'          # 模擬瀏覽器          self.headers = {              'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'          }  

3.2 獲取選擇器與包名

解析源碼與獲取包名:

# 獲取選擇器與包名  def getLib(self):      raw_text = requests.get(self.url, headers=self.headers).content      seletor = etree.HTML(raw_text)      lib_names = seletor.xpath('//ul[@class="pylibs"]//li//strong//text()')      return seletor, lib_names  

3.3 輸出所有包名

一行15個包名列印:

# 輸出所有包名      def print_AllLib(self, lib_names):          print('n------------------共查找到' + str(len(lib_names)) + '個包------------------n')          for i in range(len(lib_names)):              if i and i % 15 == 0:                  print('n')              print(lib_names[i], end=' ')  

3.4 搜索與下載

只摘取了核心程式碼,下載採用調用系統命令curl與axel,請在自己的系統上安裝這兩個其中之一下載!

def searchDown(self, downloadMethod='axel'):      # 此部分程式碼只摘取核心部分      if int(lib_sequence) <= max:          detail_name = detail_libs[int(lib_sequence) - 1].strip().replace('‑', '-')          download_url = self.base_url + detail_name          print('nn輸入包名正確,下載地址:' + download_url + 'n')          print("---------------------------------------開始下載---------------------------------------n")          if downloadMethod == 'curl':              cmd = 'curl -O %s' % download_url          else:              cmd = 'axel %s' % download_url          while True:              cmd_res = os.system(cmd)              if cmd_res == 0:                  print('下載成功!n')                  break              else:                  print('下載失敗!n')                  is_try = input('是否重試下載(y|n): ')                  if is_try == 'y' or is_try == 'Y':                      continue                  else:                      break      else:          print("n 33[1;31m 輸入序號不符合要求,請重新輸入! 33[0m n")  

3.5 調用

採用axel下載:

dw = AutoDownWhl()  dw.searchDown(downloadMethod='axel')  

Tags: