PyPi下载数量似乎不现实


69

大约2个月前第一次在PyPi上了一个程序包,此后进行了一些版本更新。我在本周注意到下载计数记录,很惊讶地看到它已被下载了数百次。在接下来的几天里,即使这是一个利基统计测试工具箱,我也惊讶地发现每天下载量有时会增加数百。特别是,较旧版本的软件包将继续被下载,有时其下载速率高于最新版本。

这里发生了什么?

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


2
恭喜你!我没有看到我的软件包的这种行为...我看到了一些机器人下载,但没有那么多(在新版本中可能是10-100)?也许您确实有用户?!幂律非常时尚...
Andrew Cooke 2012年

1
他们不可能如此时髦!我还同时上传了另一个非常专业的科学分析软件包(avalanchetoolbox),该软件包的行为非常相似(所有版本在1.5个月内下载次数超过1000次)。世界上没有1000个人会觉得该软件包很有趣,因此一定有些不对劲。由于avalanchetoolbox依赖于powerlaw,也许对软件包真正感兴趣的一个人设置了cron作业来自动检查和下载更新,而该作业有问题?
jeffalstott

1
对不起,来晚了茶,但是stackoverflow是永恒的,不是吗?我注意到,PyPI提供了Windows .exe二进制文件,仅提供了tar.gz包格式作为powerlaw包的源打包格式。如果要提供.zip,.tar.bz2和.tar.gz(全部作为源格式),则可以通过减去一点来获得一些提示。假设:Windows用户使用.zip。大多数.tar.gz和.tar.bz2相同数量的下载可能源于镜像。说得通?
Dilettant

PyPI-Stats.com的结果似乎是合理的。
LukaŽitnik'17

Answers:


77

在这一点上,这是一个古老的问题,但我注意到我在PyPI上拥有的软件包也有同样的问题,并需要进一步研究。事实证明,PyPI会保留相当详细的下载统计信息,包括(显然是匿名的)用户代理。由此可见,大多数下载我的软件包的人都是“ z3c.pypimirror / 1.0.15.1”和“ pep381client / 1.5”之类的东西。(PEP 381描述了PyPI的镜像基础结构。)

我编写了一个快速脚本来整理所有内容,首先包括所有内容,然后不包括最明显的机器人,结果发现实际上有99%我的软件包的下载活动是由镜像机器人引起的:与之相比,总共有14,335次下载仅146次下载(过滤了漫游器)。那只是忽略了非常明显的那些,因此它可能仍然被高估了。

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



7
现在状态页面已关闭,我如何计算我的实际下载量?根据#python中的用户说,这是由于更改了CDN来下载软件包。
Winny 2014年

20
链接似乎已死:(
tacaswell 2014年

1
我有同样的困惑,统计数据似乎不再存在:/
Stuart Axon

看到这里为什么链接不再起作用:stackoverflow.com/questions/37531231/…–
DonyorM

11

从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和friends启用的精彩的多版本检查。这些都是IMO合法的软件包的潜在用途,可能...

最后,您永远不知道代理对下载的软件包有什么真正的作用:让N个用户真正使用它或在下一次覆盖它...毕竟,恕我直言,软件包作者应该更加关注使用的数量和性质,而不是潜在用户的纯数量;-)


引用:访客编号来自https://pypi.python.org/pypi(29303个软件包)和http://pypi-ranking.info/week(有关每周编号,请参阅2013-03-23)。


2
因此,您要说的是,如果我想知道我有多少用户,我应该这样做,以便每次使用我的套餐电话时都能回家。(开玩笑)
ArtOfWarfare

@ArtOfWarfare不,我建议您忽略模糊的部分,就像我们的实现者那样,尽管在我们的代码中很少出现种族和跳过极端情况:“看起来不错,有效!Next()...“ ;-)
Dilettant

10

您还必须考虑到virtualenv越来越流行。如果您的程序包就像人们在许多项目中使用的核心库一样,他们通常会多次下载。

考虑一个用户有5个项目,他在其中使用您的软件包,每个项目都位于自己的virtualenv中。使用pip满足要求,您的软件包已通过这种方式下载了5次。然后,可以将这些项目设置在不同的计算机上,例如工作计算机,家用计算机和便携式计算机,此外,在使用Web应用程序的情况下,可能还需要一个临时服务器和一个实时服务器。总结一下,您最终只能由一个人进行多次下载。

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


参见对安德鲁·库克评论的回复;程序包B依赖程序包A,因此,如果程序包B受欢迎,这是有道理的,但程序包B的内容肯定不那么受欢迎。
jeffalstott 2012年

3

假设:Travis CI和Appveyor等CI工具也发挥了很大作用。这可能意味着每次提交/推送都会导致生成一个程序包以及将所有内容安装在requirements.txt中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.