计算详细的下载统计数据并为pypi包生成html和徽章

pypi-download-stats的Python项目详细描述


pypi下载统计信息

Github分叉github开放问题代码运行状况Travis-ci for master branch公司主分支的覆盖率报告最新版本的Sphinx文档项目状态:活动-项目已达到稳定状态,可用状态,正在积极开发中。

简介

此包从google bigquery检索一个或多个下载统计信息 pypi 包,在本地缓存它们,然后 生成下载计数徽章以及原始数据和图形的HTML页面 (由bokeh生成)。它的目的是 按计划(即每天)运行,并将结果上载到某个位置。

把它变成一个真正的服务(和一些扩展)当然会很好 但目前 我既没有时间去献身,也没有钱去支付 托管和带宽,也不想处理如何为 超过85000个项目,而不是我的少数。

希望像这样的数据最终会出现在官方的pypi中;请看 仓库 188 787 以获取有关该工作的参考。 目前,我想(a)给自己一个简单的下载统计数据的方法 还有一些徽章,比如旧的pypi遗产(每天、每周和每月下载一次) 因为(b)使一些更高的颗粒城市分析。

注意 这个包非常年轻;我是作为一个晚上/周末的项目写的, 希望只花几天时间。虽然写这个让我想洗澡 很快,它就没有测试了。如果人们开始使用它,我会改变它。

对于输出外观的真实示例,您可以查看下载 我的awslimitchecker项目的统计页面,由我桌面上的cronjob生成, http://jantman personal public.s3-website-us-east-1.amazonaws.com/pypi-stats/awslimitchecker/index.html" rel="nofollow">http://jantman personal public.s3-website-us-east-1.amazonaws.com/pypi stats/awslimitchecker/index.html

背景

2016年2月的某个时候,下载统计信息 停止使用pypi.python.org。我后来了解到,我们目前的情况(2016年8月) 众所周知,pypi实际上是pypi legacy的代码库, 而且远不是一个稳定的免提服务。由interpid灵魂组成的小团队 让它继续运行的人只需让它保持在线,同时还能工作 在更换时, 仓库 (截至2016年8月,可在线获取 点击https://pypi.io/" rel="nofollow">https://pypi.io/)。而实际的pypi.python.org Web用户界面还没有 已切换到仓库代码(仍在开发中),当前仓库 服务确实提供对pypi的完全访问。完全可以理解 以及遗留pypi代码库的"生命支持"状态,在遗留代码库中下载统计信息 是他们最后的顾虑。

但是,自2016年1月22日以来的当前下载统计数据(实际上是原始日志信息) 在google bigquery公共数据集中 可用 几乎实时更新。可能有下载统计信息的功能

要求

pypi下载统计数据依赖于bokeh生成 离线工作的漂亮svg图表,以及 google-api python客户端 用于查询bigquery。每一个都有额外的依赖关系。

安装

建议您安装到虚拟环境(virtualenv/ VEV)。请参阅 Virtualenv使用文档 有关如何创建VENV的信息。

讽刺的是,这还没上pypi。直到它是:

$ pip install git+https://github.com/jantman/pypi-download-stats.git

配置

对于具有bigquery api的项目,您需要google云凭据 启用。建议的方法是生成系统帐户凭据; 下载凭据的json文件并将路径导出为 google_application_credentials 环境变量。系统帐户 将需要添加为项目成员。

用法

使用 -h 运行以获取命令行帮助:

usage: pypi-download-stats [-h] [-V] [-v] [-Q | -G] [-o OUT_DIR]
                           [-p PROJECT_ID] [-c CACHE_DIR] [-B BACKFILL_DAYS]
                           [-P PROJECT | -U USER]

pypi-download-stats - Calculate detailed download stats and generate HTML and
badges for PyPI packages - <https://github.com/jantman/pypi-download-stats>

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit
  -v, --verbose         verbose output. specify twice for debug-level output.
  -Q, --no-query        do not query; just generate output from cached data
  -G, --no-generate     do not generate output; just query data and cache
                        results
  -o OUT_DIR, --out-dir OUT_DIR
                        output directory (default: ./pypi-stats
  -p PROJECT_ID, --project-id PROJECT_ID
                        ProjectID for your Google Cloud user, if not using
                        service account credentials JSON file
  -c CACHE_DIR, --cache-dir CACHE_DIR
                        stats cache directory (default: ./pypi-stats-cache)
  -B BACKFILL_DAYS, --backfill-num-days BACKFILL_DAYS
                        number of days of historical data to backfill, if
                        missing (defaut: 7). Note this may incur BigQuery
                        charges. Set to -1 to backfill all available history.
  -P PROJECT, --project PROJECT
                        project name to query/generate stats for (can be
                        specified more than once; this will reduce query cost
                        for multiple projects)
  -U USER, --user USER  Run for all PyPI projects owned by the specifieduser.

使用 google cloud credentials json文件位于 foo.json

$ exportGOOGLE_APPLICATION_CREDENTIALS=/foo.json
$ pypi-download-stats -P foo -P bar

运行查询但不为所有pypi项目生成报告用户内幕 "myname":

$ exportGOOGLE_APPLICATION_CREDENTIALS=/foo.json
$ pypi-download-stats -G -U myname

根据项目"foo"的缓存查询数据生成报告:

$ exportGOOGLE_APPLICATION_CREDENTIALS=/foo.json
$ pypi-download-stats -Q -P foo

为了每晚运行并将结果上传到托管s3 bucket的网站,我使用 通过cron执行以下脚本(请注意,路径是特定于我的目的的;还请注意 这两个命令,如 s3cmd 似乎没有为svg设置mime类型 图像正确):

#!/bin/bash -x
exportGOOGLE_APPLICATION_CREDENTIALS=/home/jantman/.ssh/pypi-bigquery.json
cd /home/jantman/GIT/pypi-download-stats
bin/pypi-download-stats -vv -U jantman

# sync html files
~/venvs/foo/bin/s3cmd -r --delete-removed --stats --exclude='*.svg' sync pypi-stats s3://jantman-personal-public/
# sync SVG and set mime-type, since s3cmd gets it wrong
~/venvs/foo/bin/s3cmd -r --delete-removed --stats --exclude='*.html' --mime-type='image/svg+xml' sync pypi-stats s3://jantman-personal-public/

成本

现在…我不知道。有些下载表是每天3+GB。 我想从现在 在那里(20160122)可能会产生相当大的数据成本。

错误和功能请求

通过github问题跟踪器可以愉快地接受错误报告和功能请求。拉取请求是 欢迎。将处理没有附带拉取请求的问题 在我的时间和优先权允许的情况下。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android应用程序无法打开   java无法使用SQL工具查询现有Ignite缓存   雅加达ee全局Java Servlet过滤器,是否可能?   java方法参数扩展类实现接口   如何在SilkTest中获取Java Swing应用程序对象的属性值?   java懒人日志   java jspService(HttpServletRequest,HttpServletResponse)在Spring引导(嵌入式Tomcat)中超过了65535字节的限制   在Java8中,从基于多个属性的对象列表中删除重复项   java通过从Android到Spring的改造发送图像文件   java使用JAXB创建空对象解组空元素   java RecyclerView错误未连接适配器;跳过布局和设置OnClickListener   创建SQLite数据库时出现java错误:“安卓.database.SQLite.SQLiteException:near(9598)”?   从布局XML自动生成“视图”类型的类字段的java工具?   java Swing从5倒计时到0   java Apache HttpClient在尝试下载文件时发生握手异常时引发远程主机关闭连接   java如何在spring上从json中的对象获取信息   java将Google标签管理器添加到Magnolia CMS   添加新库时java清单合并失败