首頁 > 後端開發 > Python教學 > PyPI 的 BigQuery 數據令人驚訝的事情

PyPI 的 BigQuery 數據令人驚訝的事情

Patricia Arquette
發布: 2024-11-30 19:59:15
原創
968 人瀏覽過

您可以從 Google BigQuery 資料集中取得 PyPI 套件(或項目)的下載數量。您需要一個 Google 帳戶和憑證,Google 每月提供 1 TiB 的免費配額。

每個月,我都會自動獲取過去 30 天內 8,000 個最受歡迎的軟體包的下載數量,並將其作為更易於訪問的 JSON 和 CSV 文件在 Top PyPI Packages 中提供。這些數據被廣泛用於學術界和工業界的研究。

但是,隨著越來越多的軟體包和版本上傳到 PyPI,並且記錄的下載量越來越多,計費資料量也會增加。

A surprising thing about PyPI

此圖表顯示每月計費的資料量。

一開始,我只收集了 4,000 個軟體包的下載數據,並透過兩個查詢取得:超過 365 天和超過 30 天的下載。但隨著時間的推移,它開始用完太多的配額來下載 365 天的數據。

所以我放棄了 365 天的數據,並將 30 天的數據從 4,000 個包裹增加到 5,000 個。後來我查了一下配額用了多少,從5000包增加到8000包。

但後來我超出了 BigQuery 2024 年 7 月獲取數據的每月 1 TiB 配額。

為了獲取遺失的資料並調查發生了什麼,我開始了 Google Cloud 的 90 天、300 美元(277.46 歐元)免費試用?

這是我發現的!

發現:僅從 pip 取得下載資料比從所有安裝程式取得下載資料的成本更高

我使用 pypinfo 用戶端來幫助查詢 BigQuery。預設情況下,它僅取得 pip 的下載。

僅點

此指令取得前 10 個軟體套件的一天下載數據,僅適用於 pip:

結果:

project download count
boto3 37,251,744
aiobotocore 16,252,824
urllib3 16,243,278
botocore 15,687,125
requests 13,271,314
s3fs 12,865,055
s3transfer 12,014,278
fsspec 11,982,305
charset-normalizer 11,684,740
certifi 11,639,584
Total 158,892,247

所有安裝人員

新增 --all 標誌可取得前 10 個軟體套件的一天下載數據,所有安裝程式:

project download count
boto3 39,495,624
botocore 17,281,187
urllib3 17,225,121
aiobotocore 16,430,826
requests 14,287,965
s3fs 12,958,516
charset-normalizer 12,781,405
certifi 12,647,098
setuptools 12,608,120
idna 12,510,335
Total 168,226,197

因此我們可以看到,預設的僅 pip 需要額外花費 25% 的資料處理和資料計費,並額外花費 25% 的美元費用。

毫不奇怪,所有安裝程式的實際下載次數都更高。排名發生了一些變化,但我預計我們在前數千個結果中仍然會得到或多或少相同的軟體包。

查詢

它向 BigQuery 發送這樣的查詢,只取得 pip:

對所有安裝者:

這些查詢是相同的,只是預設有一個額外的 ANDdetails.installer.name = "pip" 條件。做額外的過濾工作會花費更多,這似乎是合理的。

安裝人員

讓我們看看安裝程式:

installer name download count
pip 1,121,198,711
uv 117,194,833
requests 29,828,272
poetry 23,009,454
None 8,916,745
bandersnatch 6,171,555
setuptools 1,362,797
Bazel 1,280,271
Browser 1,096,328
Nexus 593,230
Homebrew 510,247
Artifactory 69,063
pdm 62,904
OS 13,108
devpi 9,530
conda 2,272
pex 194
Total 1,311,319,514

pip 仍然是迄今為止最受歡迎的,不出所料,uv 也位居榜首,約佔 pip 下載量的 10%。

其他的大約是紫外線的25%或更少。其中很多是我們之前想要排除的鏡像服務。

我認為,考慮到 uv 的重要性,以及我期望它將繼續佔據更大份額,再加上僅透過 pip 進行過濾的額外成本,意味著我們應該轉而為所有下載者獲取資料。另外,其他的並沒有佔那麼多份額。

發現:包裹數量不影響成本

這是最大的驚喜。早些時候,我一直在增加或減少數量,以盡量保持在配額以內。但事實證明,查詢多少包裹並沒有什麼差別!

我只取得了一天的資料以及不同軟體包限制的所有安裝程式:1000、2000、3000、4000、5000、6000、7000、8000。範例查詢:

A surprising thing about PyPI

結果:有趣的是,所有限額(1000-8000)的成本都是相同的:0.31 美元。

重複一天,但僅過濾點:

A surprising thing about PyPI

結果: 成本增加至 0.39 美元,但所有限制均相同。

讓我們對所有安裝程式重複一遍,但持續30 天,這次查詢的限制是遞減的,以防我們只為增量更改付費:8000、7000、6000、5000、4000、3000、2000、 1000:

A surprising thing about PyPI

結果:同樣,無論套餐限制如何,費用都是相同的:每次查詢 4.89 美元。

那麼,讓我們重複一遍,將限制增加十次方,直到 1,000,000!最後一個取得 PyPI 上所有 531,022 個套件的資料:

limit projects count estimated cost bytes billed bytes processed
1 1 0.20 43,447,746,560 43,447,720,943
10 10 0.20 43,447,746,560 43,447,720,943
100 100 0.20 43,447,746,560 43,447,720,943
1000 1,000 0.20 43,447,746,560 43,447,720,943
8000 8,000 0.20 43,447,746,560 43,447,720,943
10000 10,000 0.20 43,447,746,560 43,447,720,943
100000 100,000 0.20 43,447,746,560 43,447,720,943
1000000 531,022 0.20 43,447,746,560 43,447,720,943

A surprising thing about PyPI

結果:同樣,無論是 1 包還是 531,022 包,成本都是一樣的!

發現:天數影響成本

不足為奇。我之前就注意到 365 天佔了太多配額,我可以繼續 30 天。

以下是1 到30 天內的估計成本和位元組數(針對一個軟體包、所有安裝程式)(f"pypinfo --all --json --indent 0 --days {days} --limit 1 '' 項目」),呈現大致線性的成長:

A surprising thing about PyPI

結論

  • 無論我獲取多少個包的數據,我都可以獲得所有包並將其提供給每個人,具體取決於數據文件的大小。仍然提供包含 8,000 個左右包的較小文件是有意義的:通常您只需要一個較大但易於管理的數字。

  • 僅過濾來自 pip 的下載會花費更多,因此我已轉為獲取所有安裝程式的資料。

  • 天數會影響成本,因此我將來需要減少天數以保持在配額之內。例如,在某些時候我可能需要從 30 天切換到 25 天,然後從 25 天切換到 20 天。

更多調查細節、腳本和資料檔案可以在
找到 hugovk/top-pypi-packages#36.

如果您知道任何降低成本的技巧,請告訴我!


標題照片:“平衡石,巨石陣,新南威爾士州格倫因尼斯附近”,由澳大利亞皇家歷史學會拍攝,沒有已知的版權限制。

以上是PyPI 的 BigQuery 數據令人驚訝的事情的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板