成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 resuests 訪問 Python 包索引(PyPI)的 JSON API

開發 后端
PyPI 的 JSON API 是一種機器可直接使用的數據源,你可以訪問和你瀏覽網站時相同類型的數據。

[[397233]]

PyPI 的 JSON API 是一種機器可直接使用的數據源,你可以訪問和你瀏覽網站時相同類型的數據。

PyPI(Python 軟件包索引)提供了有關其軟件包信息的 JSON API。本質上,它是機器可以直接使用的數據源,與你在網站上直接訪問是一樣的的。例如,作為人類,我可以在瀏覽器中打開 Numpy 項目頁面,點擊左側相關鏈接,查看有哪些版本,哪些文件可用以及發行日期和支持的 Python 版本等內容: 

NumPy project page

但是,如果我想編寫一個程序來訪問此數據,則可以使用 JSON API,而不必在這些頁面上抓取和解析 HTML。

順便說一句:在舊的 PyPI 網站上,還托管在 pypi.python.org 時,NumPy 的項目頁面位于 pypi.python.org/pypi/numpy,訪問其 JSON API 也很簡單,只需要在最后面添加一個 /json ,即 https://pypi.org/pypi/numpy/json。現在,PyPI 網站托管在 pypi.org,NumPy 的項目頁面是 pypi.org/project/numpy。新站點不會有單獨的 JSON API URL,但它仍像以前一樣工作。因此,你不必在 URL 后添加 /json,只要記住 URL 就夠了。

你可以在瀏覽器中打開 NumPy 的 JSON API URL,Firefox 很好地渲染了數據:

 

JSON rendered in Firefox

你可以查看 inforelease 和 urls 其中的內容。或者,你可以將其加載到 Python Shell 中,以下是幾行入門教程:

  1. import requests
  2. url = "https://pypi.org/pypi/numpy/json"
  3. r = requests.get(url)
  4. data = r.json()

獲得數據后(調用 .json() 提供了該數據的 字典),你可以對其進行查看:

 

Inspecting data

查看 release 中的鍵:

 

Inspecting keys in releases

這表明 release 是一個以版本號為鍵的字典。選擇一個并查看以下內容:

 

Inspecting version

每個版本都包含一個列表,release 包含 24 項。但是每個項目是什么?由于它是一個列表,因此你可以索引第一項并進行查看:

 

Indexing an item

這是一個字典,其中包含有關特定文件的詳細信息。因此,列表中的 24 個項目中的每一個都與此特定版本號關聯的文件相關,即在 https://pypi.org/project/numpy/1.20.1/#files 列出的 24 個文件。

你可以編寫一個腳本在可用數據中查找內容。例如,以下的循環查找帶有 sdist(源代碼包)的版本,它們指定了 requires_python 屬性并進行打印:

  1. for version, files in data['releases'].items():
  2.     for f in files:
  3.         if f.get('packagetype') == 'sdist' and f.get('requires_python'):
  4.             print(version, f['requires_python'])

 

sdist files with requires_python attribute

piwheels

去年,我在 piwheels 網站上實現了類似的 APIpiwheels.org 是一個 Python 軟件包索引,為樹莓派架構提供了 wheel(預編譯的二進制軟件包)。它本質上是 PyPI 軟件包的鏡像,但帶有 Arm wheel,而不是軟件包維護者上傳到 PyPI 的文件。

由于 piwheels 模仿了 PyPI 的 URL 結構,因此你可以將項目頁面 URL 的 pypi.org 部分更改為 piwheels.org。它將向你顯示類似的項目頁面,其中詳細說明了構建的版本和可用的文件。由于我喜歡舊站點允許你在 URL 末尾添加 /json 的方式,所以我也支持這種方式。NumPy 在 PyPI 上的項目頁面為 pypi.org/project/numpy,在 piwheels 上,它是 piwheels.org/project/numpy,而 JSON API 是 piwheels.org/project/numpy/json 頁面。

沒有必要重復 PyPI API 的內容,所以我們提供了 piwheels 上可用內容的信息,包括所有已知發行版的列表,一些基本信息以及我們擁有的文件列表:

 

JSON files available in piwheels

與之前的 PyPI 例子類似,你可以創建一個腳本來分析 API 內容。例如,對于每個 NumPy 版本,其中有多少 piwheels 文件:

  1. import requests
  2.  
  3. url = "https://www.piwheels.org/project/numpy/json"
  4. package = requests.get(url).json()
  5.  
  6. for version, info in package['releases'].items():
  7.     if info['files']:
  8.         print('{}: {} files'.format(version, len(info['files'])))
  9.     else:
  10.         print('{}: No files'.format(version))

此外,每個文件都包含一些元數據:

 

Metadata in JSON files in piwheels

方便的是 apt_dependencies 字段,它列出了使用該庫所需的 Apt 軟件包。本例中的 NumPy 文件,或者通過 pip 安裝 Numpy,你還需要使用 Debian 的 apt 包管理器安裝 libatlas3-base 和 libgfortran

以下是一個示例腳本,顯示了程序包的 Apt 依賴關系:

  1. import requests
  2.  
  3. def get_install(package, abi):
  4.     url = 'https://piwheels.org/project/{}/json'.format(package)
  5.     r = requests.get(url)
  6.     data = r.json()
  7.     for version, release in sorted(data['releases'].items(), reverse=True):
  8.         for filename, file in release['files'].items():
  9.             if abi in filename:
  10.                 deps = ' '.join(file['apt_dependencies'])
  11.                 print("sudo apt install {}".format(deps))
  12.                 print("sudo pip3 install {}=={}".format(package, version))
  13.                 return
  14.  
  15. get_install('opencv-python', 'cp37m')
  16. get_install('opencv-python', 'cp35m')
  17. get_install('opencv-python-headless', 'cp37m')
  18. get_install('opencv-python-headless', 'cp35m')

我們還為軟件包列表提供了一個通用的 API 入口,其中包括每個軟件包的下載統計:

  1. import requests 
  2.  
  3. url = "https://www.piwheels.org/packages.json" 
  4. packages = requests.get(url).json() 
  5. packages = { 
  6.     pkg: (d_month, d_all) 
  7.     for pkg, d_month, d_all, *_ in packages 
  8.  
  9. package = 'numpy' 
  10. d_month, d_all = packages[package] 
  11.  
  12. print(package, "has had", d_month, "downloads in the last month"
  13. print(package, "has had", d_all, "downloads in total"

pip search 因為其 XMLRPC 接口過載而被禁用,因此人們一直在尋找替代方法。你可以使用 piwheels 的 JSON API 來搜索軟件包名稱,因為軟件包的集合是相同的:

  1. #!/usr/bin/python3
  2. import sys
  3.  
  4. import requests
  5.  
  6. PIWHEELS_URL = 'https://www.piwheels.org/packages.json'
  7.  
  8. r = requests.get(PIWHEELS_URL)
  9. packages = {p[0] for p in r.json()}
  10.  
  11. def search(term):
  12.     for pkg in packages:
  13.         if term in pkg:
  14.             yield pkg
  15.  
  16. if __name__ == '__main__':
  17.     if len(sys.argv) == 2:
  18.         results = search(sys.argv[1].lower())
  19.         for res in results:
  20.             print(res)
  21.     else:
  22.         print("Usage: pip_search TERM")

有關更多信息,參考 piwheels 的 JSON API 文檔

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2017-08-31 15:20:03

PythonPython3HTTP

2025-05-21 09:43:26

2023-07-28 07:43:55

2023-02-14 07:19:31

2022-08-16 19:45:03

惡意軟件加密

2021-05-25 14:13:07

Python軟件包垃圾

2020-03-16 18:30:47

pipPythonLinux

2024-02-18 08:00:00

PythonAI多模態模型API

2023-07-31 10:38:07

2022-08-10 18:23:39

Python軟件包索引惡意軟件

2021-01-15 10:10:24

惡意程序包程序包惡意代碼

2015-09-09 08:40:39

Java簡單入門

2009-06-08 09:22:07

數據訪問優化SQL Server

2015-03-13 15:21:23

phpgoogleapi

2021-05-26 08:48:08

黑客攻擊Python

2011-06-14 10:43:44

索引

2022-09-25 12:48:28

Python惡意軟件

2023-07-19 11:57:33

2023-12-15 13:53:58

2019-07-22 08:49:37

PythonJSON編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频一区二区 | 不卡一区 | 免费国产视频 | 日本精品视频在线 | 天天操天天怕 | 伊人手机在线视频 | 亚洲国产成人精品久久久国产成人一区 | 免费中文字幕日韩欧美 | 亚洲一区播放 | 亚洲综合视频 | 99久久精品免费看国产四区 | 国产精品我不卡 | 欧美视频精品 | 国产乱码精品一区二区三区五月婷 | 91精品国产91 | 国产精品福利网 | 久久国产日本 | 日本午夜免费福利视频 | 天天艹天天干天天 | 欧美精品在线一区二区三区 | 精品欧美一区二区精品久久久 | 欧美日韩成人在线 | 欧美极品在线视频 | 国产精品日韩高清伦字幕搜索 | 超碰导航 | 欧美黄 片免费观看 | 男女羞羞的网站 | 特级毛片爽www免费版 | 黄视频免费 | 成人在线观看中文字幕 | 国产91在线播放 | 亚洲影音先锋 | 色资源在线视频 | 日韩精品免费一区 | 久久久国产一区二区三区 | 亚洲综合在线视频 | 日韩在线视频网址 | 国产丝袜一区二区三区免费视频 | 久久久噜噜噜www成人网 | 亚洲一区二区三区福利 | 亚洲国产精品久久久久婷婷老年 |