分析pypi包下载¶
本节介绍如何使用 PyPI package dataset 要了解有关在Pypi上托管的包(或包)的下载的更多信息。例如,您可以使用它来发现用于下载包的Python版本的分布情况。
背景¶
Pypi不显示下载统计信息,因为它们很难准确地收集和显示。原因包括在 announcement email :
原因很多 [下载计数] 去除/去除其中一些是:
技术上很难与新的cdn合作
cdn被捐赠给psf,捐赠层不提供任何形式的日志访问。
没有日志访问的解决方案将大大降低cdn的实用性。
- 高度不准确
有许多事情阻止下载计数不准确,其中一些包括:
PIP下载缓存
内部或非官方镜子
不在Pypi上承载的包(为了比较)
镜像或非官方的抓取脚本导致计数膨胀(上一次我看了25%的下载来自已知的镜像脚本)。
不是特别有用
仅仅因为一个项目被下载了很多并不意味着它是好的
同样,仅仅因为一个项目没有被大量下载并不意味着它是坏的。
简言之,由于各种原因,它的价值都很低,而使其发挥作用所需的折衷是很高的,因此它并没有有效地利用资源。
作为替代方案, Linehaul project 流下载日志到 Google BigQuery 1. Linehaul writes an entry in a the-psf.pypi.downloadsYYYYMMDD
table for each download. The table contains information about what file was downloaded and how it was downloaded. Some useful columns from the table schema 包括:
柱 |
描述 |
实例 |
---|---|---|
file.project |
项目名称 |
|
file.version |
程序包版本 |
|
details.installer.name |
安装程序 |
匹普 bandersnatch |
details.python |
python版本 |
|
设置¶
为了使用 Google BigQuery to query the PyPI package dataset, you'll need a Google account and to enable the BigQuery API on a Google Cloud Platform project. You can run the up to 1TB of queries per month using the BigQuery free tier without a credit card
导航到 BigQuery web UI .
创建新项目。
启用 BigQuery API .
有关如何开始使用BigQuery的详细说明,请参阅 BigQuery quickstart guide .
有用的查询¶
在中运行查询 BigQuery web UI 单击“撰写查询”按钮。
请注意,这些行每天存储在单独的表中,这有助于限制查询成本。这些示例查询通过使用 wildcard tables 选择所有表,然后按筛选 _TABLE_SUFFIX
.
计算包下载数¶
以下查询统计项目“pytest”的下载总数。
#standardSQL
SELECT COUNT(*) AS num_downloads
FROM `the-psf.pypi.downloads*`
WHERE file.project = 'pytest'
-- Only query the last 30 days of history
AND _TABLE_SUFFIX
BETWEEN FORMAT_DATE(
'%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
num_downloads |
---|
2117807 |
若要仅统计来自PIP的下载,请筛选 details.installer.name
列。
#standardSQL
SELECT COUNT(*) AS num_downloads
FROM `the-psf.pypi.downloads*`
WHERE file.project = 'pytest'
AND details.installer.name = 'pip'
-- Only query the last 30 days of history
AND _TABLE_SUFFIX
BETWEEN FORMAT_DATE(
'%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
num_downloads |
---|
1829322 |
随时间推移的程序包下载¶
要按每月下载分组,请使用 _TABLE_SUFFIX
伪列。还可以使用伪列来限制查询的表和相应的成本。
#standardSQL
SELECT
COUNT(*) AS num_downloads,
SUBSTR(_TABLE_SUFFIX, 1, 6) AS `month`
FROM `the-psf.pypi.downloads*`
WHERE
file.project = 'pytest'
-- Only query the last 6 months of history
AND _TABLE_SUFFIX
BETWEEN FORMAT_DATE(
'%Y%m01', DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY `month`
ORDER BY `month` DESC
num_downloads |
月 |
---|---|
1956741 |
201801 |
2344692 |
201712 |
1730398 |
201711 |
2047310 |
201710 |
1744443 |
201709 |
1916952 |
201708 |
其他工具¶
您还可以访问 PyPI package dataset 通过BigQuery API编程。
皮皮诺¶
pypinfo 是一个命令行工具,它提供对数据集的访问,并可以生成多个有用的查询。例如,可以使用命令查询包的下载总数 pypinfo package_name
.
$ pypinfo requests
Served from cache: False
Data processed: 6.87 GiB
Data billed: 6.87 GiB
Estimated cost: $0.04
| download_count |
| -------------- |
| 9,316,415 |
安装 pypinfo 使用PIP。
pip install pypinfo
其他类库¶
google-cloud-bigquery 是访问BigQuery API的官方客户端库。
pandas-gbq 允许通过访问查询结果 Pandas .