【问题标题】:PyPi download counts seem unrealisticPyPi 下载计数似乎不切实际
【发布时间】:2012-03-27 17:28:04
【问题描述】:

我在~2 个月前第一次输入a package on PyPi,并从那时起进行了一些版本更新。本周我注意到下载计数记录,并惊讶地发现它已被下载数百次。在接下来的几天里,我更惊讶地看到下载次数有时会增加数百每天,尽管这是一个小众统计测试工具箱。特别是,旧版本的软件包会继续被下载,有时下载速度比最新版本更高。

这是怎么回事?

PyPi 的下载计数是否存在错误,或者是否有大量爬虫抓取开源代码(就像我的一样)?

【问题讨论】:

  • 恭喜!我没有看到我的包的这种行为......我看到了一些机器人下载,但没有那么多(新版本可能有 10-100 个?)。也许你真的有用户?!幂律很时髦……
  • 不可能这么时髦!我还同时上传了another,非常专业的科学分析包(avalanchetoolbox),它的行为非常相似(所有版本在 1.5 个月内下载超过 1,000 次)。世界上没有 1,000 人会觉得这个包裹很有趣,所以肯定有问题。由于 avalanchetoolbox 依赖于幂律,也许一个真正对包感兴趣的人设置了一个 cron 作业来自动检查和下载更新,而这个作业有问题?
  • 抱歉,喝茶迟到了,但是 stackoverflow 有点永恒,不是吗?我注意到,PyPI 提供了一个 windows .exe 二进制文件,并且只有 tar.gz 包格式作为你的 powerlaw 包的源包格式。如果您要提供 .zip、.tar.bz2 和 .tar.gz(均作为源格式),则可以通过减去一点来获得 some 提示。 假设:Windows 用户使用 .zip。大多数 .tar.gz 和 .tar.bz2 相同数量的下载可能源于镜像。有意义吗?
  • PyPI-Stats.com 的结果似乎是合理的。

标签: python web-crawler pypi


【解决方案1】:

假设:Travis CI 和 Appveyor 等 CI 工具也做出了相当大的贡献。这可能意味着每次提交/推送都会导致构建包并安装 requirements.txt 中的所有内容

【讨论】:

    【解决方案2】:

    从 Cairnarvon 的总结声明开始:

    “看起来 PyPI 需要镜像的主要原因是它有镜像。”

    我会稍微修改一下:

    这可能是 PyPI 实际工作的方式,因此必须进行镜像,这可能会为真实流量贡献额外的位(或两个:-)。

    目前我认为您必须与主索引交互才能知道要在您的存储库中更新什么。状态不能简单地通过某些可公开访问的文件夹层次结构上的时间戳来访问。所以,坏事是,rsync 不在等式。好消息是,您可以通过 JSON、OAuth、XML-RPC 或 HTTP 接口与索引通信。

    对于 XML-RPC:

    $> python
    >>> import xmlrpclib
    >>> import pprint
    >>> client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi')
    >>> client.package_releases('PartitionSets')
    ['0.1.1']
    

    对于 JSON,例如:

    $> curl https://pypi.python.org/pypi/PartitionSets/0.1.1/json
    

    如果有大约。托管了 30.000 个包 [1],其中一些包每周下载 50.000 到 300.000 次 [2](如分发、pip、请求、paramiko、lxml、boto、paramike、redis 等)你真的需要至少来自可访问性的观点。想象一下当pip install NeedThisPackage 失败时用户会做什么:等待?此外,公司范围的 PyPI 镜像也很常见,它们充当其他无法路由的网络的代理。最后不要忘记通过 virtualenv 和朋友启用的美妙的多版本检查。这些都是 IMO 合法的,并且可能是对软件包的美妙使用......

    最后,你永远不知道代理真正对下载的包做了什么:让 N 个用户真正使用它,或者下次只是覆盖它......毕竟,恕我直言,包作者应该比纯粹的潜在用户数量更关心使用的数量和性质 ;-)


    Refs:猜测的数字来自https://pypi.python.org/pypi(29303 包)和http://pypi-ranking.info/week(每周数字,2013 年 3 月 23 日请求)。

    【讨论】:

    • 所以你的意思是,如果我想知道我有多少用户,我应该让它在每次使用时都会打电话回家。 (开玩笑。)
    • @ArtOfWarfare 不,我建议宁愿忽略模糊部分,就像我们的实现者那样,尽管我们的代码中很少有比赛和跳过极端情况:“看起来不错,工作! Next() ...“ ;-)
    【解决方案3】:

    在这一点上这是一个老问题,但我注意到我在 PyPI 上的一个包有同样的事情,并进一步调查。事实证明,PyPI 保留了相当详细的download statistics,包括(显然是稍微匿名的)用户代理。由此可见,大多数下载我的包的人都是“z3c.pypimirror/1.0.15.1”和“pep381client/1.5”之类的东西。 (PEP 381 描述了 PyPI 的镜像基础架构。)

    我写了a quick script 来统计所有内容,首先包括所有这些,然后忽略最明显的机器人程序,结果发现我的软件包实际上 99% 的下载活动是由 mirrorbots 引起:总共 14,335 次下载,相比之下,bot 过滤后只有 146 次下载。这只是忽略了非常明显的那些,所以它可能仍然被高估了。

    看起来 PyPI 需要镜像的主要原因是因为它有镜像。

    【讨论】:

    • pypi.python.org/stats 似乎在 2013 年 5 月收到了最后一次更新。
    • 现在状态页面已关闭,我如何才能确定我的 真实 下载量?根据#python 中的用户的说法,这是由于更改为用于下载包的 CDN。
    • 链接好像失效了:(
    • 我也有同样的困惑,统计数据似乎不再存在:/
    • 在此处查看链接不再有效的原因:stackoverflow.com/questions/37531231/…
    【解决方案4】:

    您还必须考虑到 virtualenv 越来越受欢迎。如果您的包类似于人们在许多项目中使用的核心库,他们通常会下载多次。

    假设一个用户有 5 个项目,他在其中使用您的包,每个项目都存在于自己的 virtualenv 中。使用 pip 满足要求,你的包已经通过这种方式下载了 5 次。然后这些项目可能会设置在不同的机器上,比如工作、家庭和笔记本电脑,此外,如果是 Web 应用程序,可能还会有一个登台和一个实时服务器。综上所述,您最终会获得一个人的大量下载。

    只是一个想法......也许你的包裹只是很好。 ;)

    【讨论】:

    • 查看对 Andrew Cooke 评论的回复;包 B 依赖于包 A,所以如果包 B 很受欢迎,那是有道理的,但包 B 的内容却完全没有那么受欢迎。
    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多