PyPi下载计数似乎不真实

2024-06-01 20:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

两个月前,我第一次放了a package on PyPi,此后我做了一些版本更新。我注意到这周的下载计数记录,并惊讶地看到它被下载了数百次。在接下来的几天里,我更惊讶地看到下载量有时会每天增加数百个,尽管这是一个利基统计测试工具箱。特别是,软件包的旧版本仍在继续下载,有时下载速度比最新版本高。

这是怎么回事?

PyPi的下载计数中是否有bug,或者是否有大量的爬虫程序(和我的一样)在抓取开源代码?


Tags: 程序版本pypipackage源代码on记录测试工具
4条回答

在这一点上,这是一个老问题,但是我注意到了PyPI上的一个包的相同之处,并进行了进一步的研究。结果发现,PyPI保持了相当详细的download statistics,包括(显然是稍微匿名的)用户代理。从中可以明显看出,大多数下载我软件包的人都是“z3c.pypimirror/1.0.15.1”和“pep381client/1.5”。(PEP 381描述了PyPI的镜像基础结构。)

我写了a quick script来总结所有的东西,首先包括所有的,然后去掉最明显的机器人,结果发现我的软件包的下载活动中有99%是由mirrorbots引起的:总共14335次下载,而过滤了机器人的下载只有146次。而这只是忽略了非常明显的,所以可能还是高估了。

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

从Cairnarvon的总结性陈述开始:

"It looks like the main reason PyPI needs mirrors is because it has them."

我会稍微修改一下:

It might be more the way PyPI actually works and thus has to be mirrored, that might contribute an additional bit (or two :-) to the real traffic.

目前,我认为您必须与主索引交互,才能知道要在存储库中更新什么。状态不能简单地通过某些可公开访问的文件夹层次结构上的时间戳访问。所以,不好的是,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

如果有大约30000个包托管在[1]中,其中一些包每周被下载50.000到300.000次[2](例如distribute、pip、requests、paramiko、lxml、boto、paramike、redis和其他包),那么至少从可访问性的角度来看,您确实需要镜像。想象一下当pip install NeedThisPackage失败时用户会做什么:等待?此外,公司范围内的PyPI镜像通常充当不可路由网络的代理。最后不要忘记通过virtualenv和friends启用的精彩多版本检查。这些都是国际海事组织合法和潜在的奇妙的使用包。。。

最后,你永远不知道代理对下载包的真正作用:让N个用户真正使用它,或者下次重写它。。。毕竟,IMHO软件包的作者应该比纯粹的潜在用户数更关心使用的数量和性质


参考文献:客户评估号码来自https://pypi.python.org/pypi(29303个包裹)和http://pypi-ranking.info/week(对于周号码,请求2013-03-23)。

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

假设一个用户有5个项目,他使用您的包,每个项目都生活在自己的virtualenv中。使用pip来满足需求,您的包已经被这样下载了5次。然后,这些项目可能会设置在不同的计算机上,如工作、家庭和笔记本电脑,此外,在web应用程序的情况下,可能会有一个临时服务器和一个实时服务器。综上所述,一个人可以下载很多东西。

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

从Cairnarvon的总结性陈述开始:

"It looks like the main reason PyPI needs mirrors is because it has them."

我会稍微修改一下:

It might be more the way PyPI actually works and thus has to be mirrored, that might contribute an additional bit (or two :-) to the real traffic.

目前,我认为您必须与主索引交互,才能知道要在存储库中更新什么。状态不能简单地通过某些可公开访问的文件夹层次结构上的时间戳访问。所以,不好的是,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

如果有大约30000个包托管在[1]中,其中一些包每周被下载50.000到300.000次[2](如distribute、pip、requests、paramiko、lxml、boto、paramike、redis和其他),那么至少从可访问性的角度来看,您确实需要镜像。想象一下当pip install NeedThisPackage失败时用户会做什么:等待?此外,公司范围内的PyPI镜像通常充当不可路由网络的代理。最后不要忘记通过virtualenv和friends启用的精彩多版本检查。这些都是国际海事组织合法和潜在的奇妙的使用包。。。

最后,你永远不知道代理对下载包的真正作用:让N个用户真正使用它,或者下次重写它。。。毕竟,IMHO软件包的作者应该比纯粹的潜在用户数更关心使用的数量和性质


参考文献:客户评估号码来自https://pypi.python.org/pypi(29303个包裹)和http://pypi-ranking.info/week(对于周号码,请求2013-03-23)。

相关问题 更多 >