PyPi下载计数似乎不切实际

jef*_*ott 65 python web-crawler pypi

2个月前第一次在PyPi上了一个软件包,并且从那以后做了一些版本更新.本周我注意到了下载计数记录,并惊讶地看到它被下载了数百次.在接下来的几天里,我更惊讶的是,即使这是一个利基统计测试工具箱,下载次数有时会增加每天数百.特别是,旧版本的软件包继续被下载,有时以比最新版本更高的速率下载.

这里发生了什么?

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

Cai*_*von 74

这是一个古老的问题,但我注意到我在PyPI上有一个包,并进一步调查.事实证明,PyPI保留了相当详细的下载统计信息,包括(显然是略微匿名)用户代理.从那以后,很明显大多数人下载我的软件包都是"z3c.pypimirror/1.0.15.1"和"pep381client/1.5"之类的东西.(PEP 381描述了PyPI的镜像基础架构.)

我写了一个快速的脚本来计算所有内容,首先包括所有这些,然后遗漏最明显的机器人,事实证明我的软件包的下载活动的99%是由mirrorbots引起的:总共下载了14,335次,相比之下过滤机器人只有146次下载.而这只是遗漏了非常明显的,所以它可能仍然是高估.

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

  • 链接似乎死了:( (20认同)
  • 现在状态页面已关闭,我如何找出我的*真实*下载?根据#python中的用户,这是由于更改了CDN以下载软件包. (7认同)

Dil*_*ant 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']
Run Code Online (Sandbox Code Playgroud)

对于JSON,例如:

$> curl https://pypi.python.org/pypi/PartitionSets/0.1.1/json
Run Code Online (Sandbox Code Playgroud)

如果有约.30.000个软件包托管[ 1 ],其中一些软件每周下载50.000到300.000次[ 2 ](如发布,pip,请求,paramiko,lxml,boto,paramike,redis等)你至少需要从可访问的角度来看镜像.想象一下用户在pip install NeedThisPackage失败时做了什么:等等?公司范围的PyPI镜像也很常见,作为其他不可路由的网络的代理.最后不要忘记通过virtualenv和朋友启用的精彩多版本检查.这些都是IMO合法的,可能是包的精彩用途......

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


参考:guestimated数字来自https://pypi.python.org/pypi(29303包)和http://pypi-ranking.info/week(每周数字,请求2013-03-23).

  • 所以你的意思是,如果我想知道我有多少用户,我应该让我的包裹在每次使用时打电话回家。(开玩笑。) (2认同)

Dir*_*ler 10

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

考虑一个用户有5个项目,他使用你的包,每个项目都有自己的virtualenv.使用pip来满足要求,您的包已经以这种方式下载了5次.然后,可以在不同的机器上设置这些项目,例如工作,家庭和膝上型计算机,此外,在Web应用程序的情况下可能存在升级和实时服务器.总结一下,你最终会被一个人下载很多次.

只是一个想法...也许你的包装很简单.;)


小智 5

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