Подтвердить что ты не робот

Показатели загрузки PyPi кажутся нереалистичными

Я положил пакет на PyPi в первый раз ~ 2 месяца назад и с тех пор сделал некоторые обновления. На этой неделе я заметил запись отсчета загрузки и был удивлен, увидев, что ее скачали сотни раз. В течение следующих нескольких дней я был более удивлен, увидев, что количество загрузок увеличивается иногда на сотни в день, даже если это ниша для статистических тестов. В частности, старые версии пакета продолжают загружаться, иногда с более высокими ставками, чем самая новая версия.

Что здесь происходит?

Есть ли ошибка в подсчете загрузки PyPi, или существует множество сканеров, захватывающих открытый исходный код (как мой)?

4b9b3361

Ответ 1

Это уже старый вопрос на данный момент, но я заметил то же самое о пакете, который у меня есть на PyPI, и исследовал его дальше. Оказывается, PyPI хранит достаточно детально статистику загрузки, включая (видимо, слегка анонимные) пользовательские агенты. Из этого было очевидно, что большинство людей, загружающих мой пакет, были такими, как "z3c.pypimirror/1.0.15.1" и "pep381client/1.5". (PEP 381 описывает инфраструктуру зеркалирования для PyPI.)

Я написал быстрый script, чтобы подсчитать все, сначала включив все их, а затем упустив наиболее очевидные боты, и получается, что буквально 99% активности загрузки для моего пакета было вызвано зеркальными лотками: 14,335 загрузок всего, по сравнению с 146 загрузками с фильтрами ботов. И это просто оставляет очень очевидные, поэтому он, вероятно, все еще переоценивается.

Похоже, главная причина, по которой PyPI нуждается в зеркалах, состоит в том, что она имеет их.

Ответ 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] (например, раздавать, пипсы, запросы, paramiko, lxml, boto, paramike, redis и другие) вам действительно нужны зеркала, по крайней мере, с точки зрения accessibilty. Представьте себе, что делает пользователь, когда pip install NeedThisPackage терпит неудачу: Подождите? Кроме того, широко распространенные зеркала PyPI компании довольно распространены, выступая в качестве прокси-серверов для других неприступных сетей. Наконец, не забывайте, что замечательная проверка нескольких версий включена через virtualenv и друзей. Все это IMO законное и потенциально замечательное использование пакетов...

В конце концов, вы никогда не знаете, что агент действительно делает с загруженным пакетом: имейте в виду, что пользователи N действительно используют его или просто перезаписывают его в следующий раз... и в конце концов, авторы IMHO-пакетов должны больше заботиться о номере и характер использования, чем чистое число потенциальных пользователей;-)


Refs: Гостевые номера от https://pypi.python.org/pypi (29303 пакетов) и http://pypi-ranking.info/week (для недельных номеров, запрошенных в 2013-03-23).

Ответ 3

Вы также должны учитывать, что virtualenv становится все более популярным. Если ваш пакет похож на основную библиотеку, которую люди используют во многих своих проектах, они обычно загружают ее несколько раз.

Рассмотрим, что у одного пользователя есть 5 проектов, где он использует ваш пакет, и каждый живет в своем собственном виртуальном пространстве. Используя pip для удовлетворения требований, ваш пакет уже загружен в 5 раз. Затем эти проекты могут быть настроены на разных машинах, таких как рабочие, домашние и портативные компьютеры, кроме того, в случае веб-приложения может быть промежуточный и живой сервер. Подводя итог, вы получаете множество загрузок одним человеком.

Просто мысль... возможно, ваш пакет просто хорош.;)

Ответ 4

Гипотеза: инструменты CI, такие как Travis CI и Appveyor, также вносят свой вклад. Это может означать, что каждый commit/push приводит к созданию пакета и установке всего в requirements.txt

Ответ 5

Результаты PyPI-Stats.com кажутся разумными.