The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Подмена зависимости в Python-библиотеке, насчитывающей 40 млн загрузок в месяц

10.03.2025 19:54

В библиотеке Python JSON Logger выявлена уязвимость (CVE-2025-27607) дающая возможность подменить зависимость при установке через каталог PyPI и добиться выполнения своего кода на системах, использующих данный пакет. Библиотека Python JSON Logger, которая позволяет организовать ведение лога в формате JSON, за последний месяц была загружена 40 млн раз. Проблема устранена в версии Python JSON Logger 3.3.0, опубликованной 7 марта.

Уязвимость вызвана тем, что в числе необязательных зависимостей у Python JSON Logger была указана библиотека "msgspec-python313-pre", авторы которой в декабре 2024 года удалили свой проект из каталога PyPI, не уведомив разработчиков зависимых пакетов. Соответственно, злоумышленники могли загрузить в каталог PyPI свою библиотеку с тем же именем и она была бы подхвачена при сборке Python JSON Logger.

Выявивший проблему исследователь зарегистрировал новый пакет именем msgspec-python313-pre и продемонстрировал на практике возможность выполнения кода при установке Python JSON Logger с зависимостями для разработчиков, используя команду "pip install python-json-logger[dev]" на системах с Python 3.13.

Примечательно, что администраторов PyPI ранее несколько раз просили запретить удаление проектов, чтобы не допустить инциденты в стиле left-pad и защитить пользователей от потенциальных угроз совершения атак через зависимости (supply chain), но предложения не были воплощены в жизнь и повторная регистрация оставалась возможной.

  1. Главная ссылка к новости (https://github.com/nhairs/pyth...)
  2. OpenNews: Уязвимость в Python-пакете Js2Py, загружаемого более миллиона раз в месяц
  3. OpenNews: Уязвимость в Python, позволяющая вызвать системные команды из изолированных скриптов
  4. OpenNews: В каталоге PyPI выявлены вредоносные библиотеки, использующие CDN PyPI для скрытия канала связи
  5. OpenNews: Атакующие получили доступ к 174 учётным записям в каталоге PyPI
  6. OpenNews: Внедрение двухфакторной аутентификации в PyPI привело к инциденту с удалением популярного пакета
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62856-pypi
Ключевые слова: pypi, pythpn
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (62) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 20:01, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    > не уведомив разработчиков зависимых пакетов

    а должен был? это же опенсорс, детка, здесь и удалить своё репо могут

     
     
  • 2.15, von Ketteler (-), 22:05, 10/03/2025 Скрыто ботом-модератором     [к модератору]
  • +5 +/
     
  • 2.32, Смузихлеб забывший пароль (?), 07:44, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну вообще-то нет. Что выложено - то выложено. Надоело вечно допиливать - просто перестаёшь новые версии выгружать
     
  • 2.44, anonymous (??), 09:22, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это разработчики python должны были предусмотреть возможность фиксации зависимостей.
     
     
  • 3.57, нах. (?), 15:35, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А они и предусмотрели. Но васяны с лефтпадом этой возможностью не пользуются, потому что во-первых это совершенно ненужная им затрата времени, во-вторых с новой версией лефтпада может приехать устраненная уязвимость с тем же самым успехом, в-третьих васян вовсе может не предполагал невиданного узбека своего лефтпада, использующего десять других лефтпадов, а просто пилил для себя, и не собирается переживать из-за того что ты встроил его васян-код в свой скрипт управления системой NORAD.

    Такая возня с ручной фиксацией цифирек возможна только в корпоративной разработке, да и то если только под руку не толкают со сроками и фичами. (Т.е. невозможна даже и там.)

    Ну и у васяна под кроватью, но кому он нужен, ломать его...

     

  • 1.2, Ivan_83 (ok), 20:07, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > выявлена уязвимость (CVE-2025-27607)

    В чём уязвимость то!?
    Причём тут вообще какой то питон логер!?


    Это проблема системы установки зависимостей самого питона допускающая атаку на цепочку поставок.

    В общем репутация CVE скамеров помножается на ноль.

     
     
  • 2.12, Аноним (1), 21:21, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • –8 +/
    тебе никогда не стать фрибзд комиттером, как бы ты не старался

    цве нужен для того, чтобы когда человек прочёл заафекченные версии, мог сразу понять - он скорее всего заафекчен, а вот версия Х+1, где зависимость убрали\изменили - она уже безопасна

     
     
  • 3.24, Ivan_83 (ok), 00:00, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Чувак, мне им никогда не стать потому что я уже и не хочу давно. Да и раньше не очень сильно хотел.

    А если ты навешиваешь CVE по зависимости - то тебе надо навешивать её не на одну нещастную либу а на все проекты где эта зависимость есть. Мне чото кажется таких проектов должно быть больше одного.

    Но вообще, я не видел раньше чтобы CVE вешали вот так.
    В том же ffmpeg да и прочих популярных либах ни раз что то находили, но никогда не приходили к проектам которые эти либы юзают.

     
  • 3.33, Смузихлеб забывший пароль (?), 07:47, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вне зависимости от стараний никогда не стать тем, для кого будет великой честью работать как прОклятому за бесплатно на тех кто гребёт баблоу на пожертвованиях и тратит его хз как и хз куда
    О, Боги, за что такое наказание, каков же смысл жЫть дальше :)
     
     
  • 4.63, Аноним (63), 19:15, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Смысл жизни – стать удобрением.
     

  • 1.3, Аноним (3), 20:18, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Фигасе они насрали в обсуждении: https://discuss.python.org/t/stop-allowing-deleting-things-from-pypi/17227

    Кто читал, какая аргументация против?

    Кстати, май инглиш из вери бэд, бат "Stop Allowing deleting things from PyPI?" переводится Гуглом как "Запретить удаление объектов из PyPI?". Как это соотносится с "просили запретить повторную регистрацию удалённых проектов"???

     
     
  • 2.4, Ivan_83 (ok), 20:32, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Да вот так.
    Смотри какой прикол: я беру пачку денег которые охота сжечь ради лулзов, открываю топ этого вашего пипа, дальше пишу авторам: куплюк ваш проект прям сегодня за $10к.
    Кто то с первой сотни по любому согласится.

    Дальше я туда или коммичу фигню ломающую всё, ну типа оставляю только coc.md, или пихаю майнер или грохаю репу.

    А дальше ловлю лулзы с телека про то как всё везде сломалось.
    Притом с случае coc.md мне и предъявить то нечего: я честно купил, дальше делаю что хочу со своим проектом.

     
     
  • 3.9, Аноним (9), 20:54, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Подобная шляпа решается версионированием, а точнее запретом (платформы хостинга репозитария) на изменения\удаление архивных версий. Ну а что вы хотели, ваш проект зависимостями задействован в другом ПО.
    Ну т.е. в кюррент "20250319_6.8.24" ты изменения писать конечно можешь, а вот подменить\удалить архив(20210101_01.1.1.) - ты уже не должен иметь прав вообще.
    Вопрос лишь во времени заморозки - через день-два, или неделю.
    Удивлен, если в Пипи это не реализовано. Хотя что с них взять, вечно думают в шлангах и гейтах, вместо безопасности.
     
     
  • 4.21, пох. (?), 23:36, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > вы хотели, ваш проект зависимостями задействован в другом ПО.

    DMCA takedown, и удалишь как миленький. (авторские права? Неаааа, не слышал?)

    Внезапно, использование зависимостей - ответственность тех кто их использует (вот они, если хотят - могут у себя коллекционировать архивы - но никому их не показывать).
    А автор имеет полное право взять и перестать предоставлять тебе исходники.

    (причем в большинстве правовых систем это право - даже передать нельзя, оно неотъемлемое. Т.е. не получится повесить при входе грозную табличку "ваш код не ваш код с момента его выкладывания в нашу помойку")

     
     
  • 5.40, Фрол (?), 09:15, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    товарищ ну вы то должны понимать что авторские права и права на распространение - это не муж и жена, а четыре разных человека?

    право идентифицировать себя, как автора произведения, оно и правда неотчуждаемое, а право на распространение, то самое копи- в копирайте - вполне себе отчуждаемое

     
     
  • 6.61, Ivan_83 (ok), 17:09, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так достаточно кинуть DCMA предъяву, чтобы ввели обеспечительные меры, а то что через месяц или год после судов и разборок это вернут на место - ваще пофик.
     
  • 5.41, Фрол (?), 09:19, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    птушо что тебе предоставляют мит и жепль лицензии? не право считать себя Рав Моше Столлманом, например, право копировать его произведения в хвост и в гриву.
     
     
  • 6.62, Ivan_83 (ok), 17:10, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Право то оно право, только вот название придётся брать другое.
     
  • 4.23, Ivan_83 (ok), 23:55, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ну т.е. в кюррент "20250319_6.8.24" ты изменения писать конечно можешь, а вот подменить\удалить архив(20210101_01.1.1.) - ты уже не должен иметь прав вообще.

    ШО!?
    Я типа за $10к это купил (или сам написал с нуля), делаю чо хочу.
    Не нравится - идите в лес и пишите там сами.
    А если ты против то приедут ребята в пативэне и применят обеспечительные резиновые меры и к серверам и к их владельцам. Но скорее всего хватит и просто емыла/звонка с обещанием приехать если через 5 минут не будет готово.

     
  • 3.26, Аноним (26), 00:11, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >$10k

    1. Оторван от реальности. Для тех вот авторов топовых проектов твои $10k - копейки. Пошлют далеко и надолго. И в паблик переписку выложат, просто чтобы поржать.
    2. Как только ты это сделаешь ... огребёшь от платформы. Напомнить, какая корпорация взяла там на себя роль хозяина всей опенсорс экосистемы, и что она делает, когда очередной лефтпадчик наглеет?

     
     
  • 4.37, Жироватт (ok), 08:42, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1. Сильное заявление, доказывать его, конечно, никто не будет.
    1.1. И? Постоянно такое всплывает, когда китайцы покупают расширения для браузеров.
    2. ...только находясь в штатовской юрисдикции или юрисдикции их европейских вассалов. Реально, на территории ~70% всей обитаемой суши, прямо или косвенно не подпадающей под штатовские законы единственное что эта корпорация может - удалить аккаунт и заспамить тебя туповатыми полуавтоматическими письмами про "встретимся в суде", на которые просто ложится болт.
     
  • 4.39, нах. (?), 08:46, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это ты оторван от реальности и явно даже читать не умеешь.

    Для автора очередной вот такой msgspec-python313-pre (название конечно само за себя говорит) уже удаленной нахрен из репо - очень даже не копейки. Он, небось, вообще не думал что его васяноподелка кому-то нужна может оказаться. А оно - опачки, используется кое-кем третьим, у кого 40 миллионов загрузок (и кто ему, кстати, ничего не заплатит вообще).

    И таких лефтпадов слепленных на скорую руку из дерьма и... дерьма без единой палочки - полный пипи.

    Потому что "для того и брали", в том и смысл существования примитивных языков с миллионами лефтпадов, что всю твою работу за тебя выполнил миллион неведомых васянов с незаконченным средним образованием.

     
  • 4.60, Ivan_83 (ok), 17:00, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    1. Я для того и написал взять ТОП, а потом спускатся по нему. Первые 50 наверное пошлют, а дальше остальные начнут думать и соглашатся, как бы до аукциона на понижение в итоге не дошло :)
    Цель то не взять вершину топа а любой или любые проекты у которых много потребителей.
    Вот указанная фигня явно была очень далеко от топа, но поломала коего кого что был выше.


    2. Огребу что? Бан - дапофиг, для меня это как лишится читательского билета в мухосранске - потеря которая никак не ощущается.

     
  • 2.5, Аноним (5), 20:35, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Там ниже по тексту обсуждение запрета удаления в контексте защиты от повторного использования: If we remove project deletion, which is just one way to prevent name reuse, we should permit orphanage or something similar.
     
  • 2.6, Аноним (6), 20:48, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Заходил Кэп, передавал что если нельзя будет удалить, то нельзя будет и повторно зарегистрировать.
     
     
  • 3.10, Аноним (10), 20:55, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Но всегда можно перепродать
     
     
  • 4.19, Аноним (19), 23:01, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Всегда можно найти выход.
     

  • 1.7, Аноним (7), 20:51, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Уязвимости уровня "придти, вскрыть при всех, перепаять.. профит!" уже не впечатляют, пошли уязвимости "а вот если бы"...
     
     
  • 2.38, Жироватт (ok), 08:42, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не, тут классическое "хакер и солонка"
     

  • 1.8, Аноним (8), 20:53, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А я не использую PyPI. Ставлю через APT и через GitHub. Уже более 10 лет. Полёт нормальный. Шах и мат, подменщики зависимостей.

    cat /etc/pip.conf
    [global]
    no-index = true
    no-deps = true

     
     
  • 2.11, Аноним (9), 20:56, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Где тот отважный герой-мантейнер, который перепаковывает все проекты из пипи, в апт-репозитарий?
    P.S. Сам я в CPAN тоже давно не заходил - все из портов ставлю.
     
     
  • 3.25, Аноним (26), 00:04, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем все перепаковывать, если можно просто из гита ставить? pip это умеет.
     
     
  • 4.28, Аноним (9), 04:11, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И как это защитит от очередного васяна, который решил пакеты на гите порушить?
     
     
  • 5.31, Аноним (31), 06:58, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    неудобный вопрос, игнорируем
     
  • 5.45, Аноним (45), 09:27, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Очень просто: ты ручками смотришь репозиторий перед использованием. Полная due digilence: лицензия (вы же не хотите вляпаться в GPL), pyproject.toml, далее исходники.
     
     
  • 6.49, нах. (?), 10:13, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > ты ручками смотришь репозиторий перед использованием

    Угу, и все стопиццот зависимостей тоже. "pip это умеет!" (нет. И с точно тем же успехом ты мог бы смотреть в исходники с pypi. Но у тебя лапки и ты не умеешь кодить.)

     
  • 2.20, Аноним (20), 23:27, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > cat /etc/pip.conf

    cat: /etc/pip.conf: Нет такого файла или каталога

     
     
  • 3.46, Аноним (45), 09:27, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это твоя проблема, что ты его не создал.
     

  • 1.13, Аноним (13), 21:26, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    PyPI, NPM, Cargo доставляют... зонды.
     
  • 1.14, Илья (??), 21:59, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И только в нугете таких проблем не было
     
  • 1.16, Tron is Whistling (?), 22:18, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ахах, ну вот как раз то, о чём я и писал. Каждому лефтпаду - по пакету непонятно где. И все вот эти вот язычки без динамической линковки, и вся эта практика сбора монолита автоматом - вот сюда вот и приводит.
     
     
  • 2.34, Смузихлеб забывший пароль (?), 07:52, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    там проблема в возможности удаления пакетов, которые уже могут быть в зависимостях
    Либо запретить удаление пакетов( что очевидно. Запарился поддерживать - ну и бросай это дело. Но, что уже сделано - то остаётся )
    Либо - помимо версии и названия пакета, запоминать его хеши, чтобы можно было отличить старый пакет от нового с таким же названием но иным содержанием
     
     
  • 3.55, Аноним (55), 13:43, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И кто будет проверять обновления сотен пакетов? Вот увидит разработчик, что после отпуска надо обновить три сотни пакетов - что он сделает?
     
     
  • 4.59, Смузихлеб забывший пароль (?), 16:04, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    суть вопроса неочевидна. Если блок уже есть - то он будет просто качаться безо всяких вопросов
    В остальном - имеет смысл перечитать исходный коммент, в котором нет упоминаний каких-либо проверяльщиков ибо он совсем о другом
     

  • 1.17, Аноним (17), 22:23, 10/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Плюс в копилку пакетников дистров.
     
     
  • 2.22, пох. (?), 23:37, 10/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как будто их создают не скриптом, чохом подбирающим любой мусор из той же самой пиписки?

     
     
  • 3.29, Аноним (9), 04:14, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    чито бы подбирать гамно из пипи, нужно что бы были задействованы пятонячьи инструменты,
    а умственно отсталых для этого в сборщиках дистрибов обычно нет.
     
     
  • 4.54, пох. (?), 13:22, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Был неправ, признаю.
     

  • 1.30, Аноним (30), 04:34, 11/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Никогда не любил эти менеджеры пакетов в яп. Нужна библиотека - пиши сам или скачай на сайте руками. На каждую программу на таких языках приходится тянуть в систему целую помойку из зависимостей. Будто чувакам их в линуксе не хватает так они их в свой софт пихают.
     
     
  • 2.35, Смузихлеб забывший пароль (?), 07:53, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это если один работаешь. А если хотя бы 5-10 чел ? Каждому будешь пошагово объяснять, как конкретный добавленный пакет подключать на его стороне или в репу десятки-сотни мегабайт мусора закидывать ?
     
     
  • 3.36, нах. (?), 08:33, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это если один работаешь.

    это если не работаешь вообще. Один или впятером - без разницы.

    > Каждому будешь пошагово объяснять

    это называется - собеседование. И это они тебе объясняют уровень минимального владения инструментами для работы, или идут искать другого лош.....

    Проблема совершенно в другом - питон без батареек превращается в просто еще один чудовищно неудобный примитивный бейсик. (как и жабоскрипт)

    А просто перекладывание миллиона зависимостей зависимостей пятого порядка себе в проект - ни от чего толком не защищает, кроме "защиты" от исправлений ошибок и может даже угроз безопасности в каждой следующей версии лефтпада.

    Где гарантия что ты себе УЖЕ не троянскую версию скопировал-то?

     

  • 1.42, Аноним (42), 09:20, 11/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Выявивший проблему исследователь зарегистрировал новый пакет именем msgspec-python313-pre и продемонстрировал на практике возможность выполнения кода при установке Python JSON Logger с зависимостями

    Каким образом при установке зависимости выполняется код?

     
     
  • 2.52, Аноним (52), 10:43, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не хожу по ссылке, но по опыту предполагаю следующее.

    Питоновские пакеты имеют как правило конфигурационный setup.py, в котором основные настройки приведены. Оттуда можно при желании и скрипты запускать, которые выполняются на этапе установки/конфигурации пакета. Поэтому если один пакет устанавливает какую-то зависимость, то отрабатывается и setup.py (этой зависимости). Кто-то умудрился переназначить зависимость на свой пакет со своим содержимым setup.py. Да, это дыра в безопасности, но уязвимостью это называть язык не поворачивается. Так оно и должно работать. Вот чего не должно - тянуть зависимости без оглядки.

     

  • 1.43, Аноним (43), 09:22, 11/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите, я у Rust с их crates ситуация получается аналогичной описываемой?
     
     
  • 2.47, Я (??), 09:38, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    на Раст такого нет, хакеры не могут выйти за блок unsafe, да и по памяти безопасность огромная, течёт, но не переиспользуется.
     
     
  • 3.48, Аноним (48), 09:43, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    зачем куда-то выходить? переписываешь пакет так чтобы он запрашивал явки и пароли пользователя и сливаешь их в облако
     
  • 3.64, OpenEcho (?), 21:52, 11/03/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.50, нах. (?), 10:16, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Там чуть сложнее - надо уметь кодить, на хрусте. И при этом еще и что-то накодить чего нет в стандартной библиотеке, а она далеко не пустая. Иначе твой крейт с нулем скачиваний никому не сможет навредить.

    Т.е. чисто технически ты можешь, но это уже будет не лефтпад и вот так выкрасить и выбросить тебе его будет жалко.

     
  • 2.51, Anony (?), 10:29, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, в расте запрещено удалять пакеты
     
     
  • 3.56, Аноним (55), 13:47, 11/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет, в расте запрещено удалять пакеты

    А если санкции?

     

  • 1.53, Аноним (53), 11:30, 11/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    всё делается просто - пакеты на pypi должны подписываться ключом разраба, который выкладывает. В зависимостях должен быть ключ для проверки. У каждого разраба свой ключ.

    вариант номер два - сложно и мутно, но фиксировать удаление/новые пакеты с тем же именем и не давать для пакетов, которые старше нового репа, подтягивать это в зависимостях. Т.е. заставлять обновить пакет + красным плевать, что пакет пересоздан

     
  • 1.58, Аноним (58), 15:36, 11/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    there is one way to do it во всей красе, ждём ещё прогрева питонистов на биткоины и бдсм для стада любитей единственных и неповторимых глобально-надёжно-питоничных решений.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру