我在大约2个月前第一次在PyPi上放了一个程序包,此后进行了一些版本更新。我在本周注意到下载计数记录,很惊讶地看到它已被下载了数百次。在接下来的几天里,即使这是一个利基统计测试工具箱,我也惊讶地发现每天下载量有时会增加数百。特别是,较旧版本的软件包将继续被下载,有时其下载速率高于最新版本。
这里发生了什么?
PyPi的下载计数中是否有错误,还是有大量的抓取抓取开源代码的爬虫(就像我的一样)?
Answers:
在这一点上,这是一个古老的问题,但我注意到我在PyPI上拥有的软件包也有同样的问题,并需要进一步研究。事实证明,PyPI会保留相当详细的下载统计信息,包括(显然是匿名的)用户代理。由此可见,大多数下载我的软件包的人都是“ z3c.pypimirror / 1.0.15.1”和“ pep381client / 1.5”之类的东西。(PEP 381描述了PyPI的镜像基础结构。)
我编写了一个快速脚本来整理所有内容,首先包括所有内容,然后不包括最明显的机器人,结果发现实际上有99%我的软件包的下载活动是由镜像机器人引起的:与之相比,总共有14,335次下载仅146次下载(过滤了漫游器)。那只是忽略了非常明显的那些,因此它可能仍然被高估了。
看起来PyPI需要镜像的主要原因是因为它具有镜像。
从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)。
您还必须考虑到virtualenv越来越流行。如果您的程序包就像人们在许多项目中使用的核心库一样,他们通常会多次下载。
考虑一个用户有5个项目,他在其中使用您的软件包,每个项目都位于自己的virtualenv中。使用pip满足要求,您的软件包已通过这种方式下载了5次。然后,可以将这些项目设置在不同的计算机上,例如工作计算机,家用计算机和便携式计算机,此外,在使用Web应用程序的情况下,可能还需要一个临时服务器和一个实时服务器。总结一下,您最终只能由一个人进行多次下载。
只是一个想法...也许您的包裹简直很好。;)