Задать вопрос
Ответы пользователя по тегу Python
  • Можно ли получить доступ к сайту?

    @rPman
    посмотрите, работает ли в браузере в docker DRM (поддержка защищенного воспроизведения в браузере), это хороший маркер не настоящего окружения, оно даже в виртуалке есть... и кстати это вариант, ваше требование docker возможно накладывает слишком тяжелые ограничения
    Ответ написан
  • Чтобы сделать несколько запросов к OpenAI серверу из Python, нужно каждый раз вызывать client.chat.completions.create?

    @rPman
    Если использовать https://platform.openai.com/docs/api-reference/res... и соответственно https://platform.openai.com/docs/api-reference/con... то там сохранение контекста встроено и не требуется пересылать весь контекст каждый раз.
    Ответ написан
    Комментировать
  • Какой отладчик для Python поставить новичку?

    @rPman
    нагуглилось:
    * штатно с python идет idle (не очень удобно но простейшие задачи решает)
    * есть по лучше - tronny, максимально простая среда разработки для новичков, проста в установке, миниатюрна, установщик с питоном 21мб или можно установить с помощью pip
    * естественно, microsoft visual studio code с расширением python
    * pycharm community
    ...
    Ответ написан
    2 комментария
  • Существует ли менеджер виртуальных окружений для python, который хранит все пакеты в одном месте?

    @rPman
    conda/mamba (и micromamba)/uv умеют хранить пакеты в одном месте и при создании окружения делать хардлинки (если они на одном диске), uv умеет делать copy-on-write для cow файловых систем типа zfs/btrfs/xfs, в этом случае даже при редактировании файла он поменяется только там где меняли но при этом место на диске при копировании не тратится (только метаинформация, там по кластерам fs хранение идет).

    Рекомендую uv, так как по факту там тот же python -m venv но подменяется сам pip установщик плюс фишки по управлению версиями.

    p.s. есть утилита duperemove которую просто натравливаешь на каталог, и она заменяет копии файлов на их copy-on-write вариант, это вообще не требует ничего менять в используемых утилитах, а просто вручную запускать ее после заметных обновлений, как минимум сэкономишь место
    Ответ написан
    2 комментария
  • Какие есть простые легковесные LLM для локального использования?

    @rPman
    Настоятельно рекомендую не ждать ответа от сообщества и не гадать, а установить что то типа lmstudio или ollama и используя их интерфейс по перебирать модели, подходящие под ваши требования на своих задачах (можно заранее собрать тестовый набор и попросить ИИ написать код для его проверки автоматически), эти утилиты поднимают llama.cpp сервер, c совместимым с openai api.

    Легковестными и терпимыми кодогенераторами являются либо специализированные модели (в название code) либо что-нибудь от топов - google gemma, microsoft phi4, openai oss (лично не пробовал но говорят что даже 20b терпимая, и почти наверняка ее можно использовать как ускоритель для 200b) и может быть qwen3 30b a3b.

    p.s. готовь 64гб ram минимум (лучше 128гб в идеале 196гб, тогда можно потрогать топовые типа deepseek), мало хранить веса, нужно еще контекстное окно обслуживать. Есть алгоритмы, позволяющие неплохо ускорять MoE модели, не влезающие в gpu, только малым их количеством (например на 196гб ram + 24gb vram запускают deepseek с несколько токенов в секунду).

    денег, которые ты потратишь на апгрейд железа хватит на месяцы и годы на использование облачных api, это при использовании топовых моделей, а если брать дешевые слабые (сравнимые с opensource) то и подавно.

    И главное, сносное качество открытые модели дают в режиме рассуждения, которое кратно увеличивает время до получения ответа (десяток минут), стоит ли оно того?
    Ответ написан
    Комментировать
  • Как правильно принимать платежи пользователей в сети Tron?

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

    в мире криптовалют это самый правильный способ, но и самый сложный, почти наверняка красивых и удобных библиотек не найти (например когда я ковырялся с tron, давно правда, мне было сложно анализировать сырую транзакцию контрактов обмена на dex-ах)

    А вот использовать централизованный api есть главная опасность, централизованный сервис подаст вам неверную информацию и вы потеряете деньги, и найти и доказать что-либо будет не просто... и главное добиться от централизованного сервиса ответственности.
    Ответ написан
    Комментировать
  • Есть ли способ сжать данные?

    @rPman
    1. хранение без сжатия, самое простое для реализации - плоские массивы на каждый элемент, типа например структура (int a, int8 b) то нужно создать два массива int[] a и int8[] b (это некрасиво ломает оптимизации кеша работы с ram если данные по каждому объекту нужны целиком сразу, ну и конечно, никто не заставляет так делать со всеми данными, но у вас python вам и так грустно)
    Еще вопрос к python, на сколько я помню для работы с массивами данных там numpy подходит (имеется в виду эффективные операции с данными а не сам доступ)

    Сразу скажу, с упаковкой данных на python работать будет отвратительно неудобно и медленно! Лучше сразу переходить на c/c++ и подключать его как модуль расширения python.

    что бы пропустить что написано ниже - вот пример библиотеки
    https://github.com/ghilesmeddour/gorilla-time-seri...

    2. если этого недостаточно, самый простой механизм сжатия целочисленных данных в массиве, особенно если данные - показания во времени, не сильно меняющиеся (т.е. соседние данные отличаются на значение, занимающее меньше int, то хранить в массиве не сами данные, а разницу от предыдущего (или от базы для блока, базы хранить в отдельном массиве), например последовательсность 12322 12320 12325 12319 можно хранить как:
    первое число 12322 и последовательность -2,5,-6.

    в этом случае случайный доступ не получится, для получения следующего числа нужно последовательно обработать весь массив, но можно кешировать значение базы для каждого N.
    ну или такой:
    база 12322 в виде одного числа, и массив 0,-2,3,-3... числа в этом массиве могут влезать не просто в int а в int8

    Если зафиксировать интервал между смены базы (например каждый 1024 числа), то случайный доступ не будет проблемой.

    Для значений, разница с базой которых выходит за возможности ее хранения (например для int8 это вне -128..127) можно выбрать какое-нибудь значение, например -128 как сигнал что разница слишком большая, и само число хранить в отдельном map(индекс,значение)... если таких выходов за границу будет относительно мало, подход будет эффективным

    В обоих примерах эффективная запись новых значений будет затруднена (но не невозможна, просто медленнее)

    p.s. ключевые слова для гугла - delta encoding, frame-of-reference, time series compression, escape value/exception coding, Apache Parquet, ClickHouse, Gorilla Time Series (честно я сначала описал технику а потом попросил ИИ найти где это используется, ее не проверял но техника очень простая и популярная, да та же квантизация llm рядом стоит)

    upd. Дальнейшее расширение подхода - динамическое изменение количества байт или даже бит на хранение разницы с базой, например мы можем хранить в массиве 1байтовые, 2-байтовые, 3-байтовые разницы и 4-байтовое само число, но вынуждены где то хранить по 2 бита на указание, какое именно сейчас используется, 00 - для int8, 01 - для int16, 10 - для int24 (не советую хранить эти биты в самих смещениях, хотя для 2-байтовых это может быть оправдано, но 4-байтового может тогда не хватить для хранения самого значения)... например отдельный массив для битовых пар, и несколько динамических массивов соответственно для int8, int 16, int24 и int32, но для понимания, по какому адресу какое значение хранится, придется анализировать массив битовых пар, например в нем указано хранение 0,0,1,1,2,0,3 что говорит что 1,2 и 6 числа будут храниться в массиве int8, а 3и 4-ое в массиве int16,.. т.е. такой подход будет эффективно работать для поседовательного чтения но плохо для случайного.
    p.s. variable byte encoding, dynamic encoding, bit-packing, Parquet, ORC, protobuf varints

    как же классно стало с современным ИИ, это гугл на стероидах, он и утверждения проверит, и погуглит алгоритмы и даже предложит куски кода по желанию (само собой придумает половину несуществующих, всегда об этом нужно помнить и перепроверять!)
    https://en.wikipedia.org/wiki/Delta_encoding
    https://www.vldb.org/pvldb/vol8/p1816-teller.pdf
    Ответ написан
  • Маппинг криптовалютных пар на криптобиржах?

    @rPman
    Я пробовал CoinGecko, но 30 запросов в минуту для полных данных не хвататет(даже с batch x250 на rest запрос), необходимо парсить +- 3000 торговых пар.
    потому что нужно забирать данные из потока событий, обычно это websocket канал, подписываешься на события торговли и изменений в стакане и в реальном времени получаешь картину.

    https://developers.binance.com/docs/binance-spot-a...
    https://www.gate.com/docs/developers/apiv4/ws/en/
    https://docs.cdp.coinbase.com/exchange/websocket-f...
    Ответ написан
    Комментировать
  • Как тренировать Yolo, размер датасета, итоговый loss?

    @rPman
    200 изображений и оно работает? На генерируй по больше изображений в датасете, поворотами и добавлением смазанного изображения и шумами алгоритмов сжатия видео, а так же наложениями нескольких объектов друг на друга. Еще можно собрать датасет на основе своих видео (твоя камера, твое освещение), просто вырезая из своих кадров box-ы распознанных элементов, собирать из них обучающую выборку (естественно модифицируя их как выше показано) и повторно тюнить модель.

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

    p.s. Есть алгоритмы сегментации (facebook SAM) которые просто выделяют объекты по контурам, эти алгоритмы можно совместить, распознавая сначала контуры, а затем, выделяя изображение с помощью этого контура (там изображение - маска), уже распозновай сам объект, так алгоритм будет работать с идеальными изображениями, на которых обучался.
    Ответ написан
    1 комментарий
  • Как наводить прицел точно на персонажа?

    @rPman
    общая идея, использовать информацию с предыдущих кадров плюс сглаживание/усреднение - калмановский фильтр, экспоненциальное сглаживание, скользящее среднее (это первое что на chatgpt-шилось, общую идею я знал но пользовался этим раз в жизни, названия не помню)

    чуть сложнее, разбирать объект на составляющие (в идеале всю сцену) и отслеживать движение каждого (недавно facebook релизила свою модельку для realtime детекции sam), тупой пример человек идет, размахивает руками, наклоняет голову, приседает... его составляющие двигаются по разному, поверх собранной информации о них уже можно строить алгоритмы определения где у человека что... плюс точность оценки координаты для части будет выше чем для целого (условно целиться нужно не в человека а в его голову, а точнее в список его частей тела по приоритетам голова, туловище, руки, ноги,.. ведь в разные моменты разные части тела будут скрываться)
    Ответ написан
  • Что взять за основу (электрика) для колонки с ИИ?

    @rPman
    Самое дешевое железо (соотношение мощность/цена) - это БУ смартфоны с android (придется выбирать, держа на пульсе руку на табличках бенчмарков).

    У старых (кажется до 7-ой версии android) даже был полноценный доступ к встроенной системе распознования речи, но потом ее выпилили (т.е. offline доступна только гуглу). Так же я помню писал простенькие скрипты, работающие в браузере (везде) но это тоже выпилили везде почти сразу,.. причины не известны, наверное жадность. Советую проверить, может сейчас работает.

    Почти полноценное linux окружение в них поднимается на базе termux/debian_no_root/т.п.

    p.s. у openai есть realtime api, и audio+text gpt уровня gpt4o, готовые примеры создания онлайн чат бота (с локальным мониторингом речи, что бы не отправлять весь шум в модельку), требования у них на сколько я знаю очень низкие
    Ответ написан
    Комментировать
  • Как оставить активным GUI на сервере при выходе?

    @rPman
    я обходил проблему дисконнекта каскадированием подключений, для каждого подключения заводится дополнительный пользователь, единственная задача которого подключиться по rdp (localhost с нужным пользователем), в этом случае дисконнект этого дополнительного пользователя не затронет окно основного.

    еще есть ibik aster, одна машина - много сессий (платная), в отличии от rdp работает на рабочих станциях (это дешевле на пару порядков чем сервер), позволяет поднимать много сессий (десяток точно) и главное это настоящая консоль а не виртуальный rdp, с поддержкой 3d графики и прочего.

    подумайте о запуске приложения на linux (wine/proton), там нет никаких проблем и искусственных ограничений (любое количество xserver, например xvfb подключаться к каждому по vnc или xephyr, где каждая сессия просто в окне)
    Ответ написан
    Комментировать
  • Как написать скрипт на питоне который будет присылать сообщение в телеграм бот об включении, выключении компьютера, неудачной попытки входа в учетку?

    @rPman
    У тебя следующие задачи, которые решать придется по разному:
    * детектирование включения машины
    решается простой фиктивной службой systemd startup
    * детектирование выключения машины
    можно конечно тоже службой shutdown, но будут события только корректных выключений, а принудительные перезагрузки резетом или например ctrl+alt+shift+pause .. r (которая работает даже если модули ядра повиснут), не отловит.
    Тут можно поставить скрипт, анализирующий работу машины на соседнюю в сети, вариантов тьма.
    * попытки входа в систему
    В общем случае это в /var/log/auth.log там будет все, и использование sudo/su, и запуск процессов cron и служб (с указанием пользователя) и ssh подключения и тьма тьмущая всего что так или иначе затрагивает авторизацию, что и является 'вход в систему', там же можно посмотреть что пишет lightdm на попытки входа в gui

    Мониторить попытки входа придется скриптом, периодически читающим файл (осторожно tail -f /var/log/auth.log | my_script не отследит ротацию логов, поэтому лучше самому следить за датой последнего изменения файла и читать его с позиции, на которой остановился в прошлый раз ну или с нуля)
    upd. век живи век учись, ключ tail -F корректно будет работать с ротацией логов

    Если делать 'по феншую', то лучше работать с подсистемой сбора событий, в python с помощью python-systemd - journal например фильтруя по _SYSTEMD_UNIT=sshd.service и _COMM=sshd (сам я не делал, посмотрел что можно и в памяти отложил, сейчас ИИ спросил, да где то так и надо)

    * отправка сообщений в telegram
    можно конечно использовать какую-нибудь библиотеку, многословно, красиво... а можно отправить один http запрос по api telegram, кода минимум, наверное все так в своих скриптах делают
    https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Hello%20World
    Ответ написан
    5 комментариев
  • Как решить проблему с подключение к серверу через websocket?

    @rPman
    Сохрани сессию в браузере в .har файл (консоль разработчика - сеть) и изучи его досканально, в худшем случае придется реверсить скрипты браузера, потому что информацию о том что это браузерный клиент можно передавать даже в таймингах задержек принятия сообщений, т.е. по самим сообщениям этого видно не будет.
    Ответ написан
    Комментировать
  • Как с помощью Selenium на Python найти элемент html страницы, который расположен в #shadow-root (open)?

    @rPman
    Это фича shadow dom

    Единственное ее применение, как я понимаю, - это защита от блокировщиков рекламы, ее стали внедрять популярные веб сервисы (например пикабу)

    Правда пометка open говорит что элементы внутри должны быть доступны из javascript
    Ответ написан
    Комментировать
  • Как добавить в приложение видео из html-фреймов (youtube, vk, vimeo)?

    @rPman
    Без браузера есть yt-dlp, консольное приложение на python (кроссплатформенное), работающее с более чем 1000 сайтов. Конечно же компании против таких приложений борятся и меняют формат страницы, поэтому приложение нужно будет оперативно обновлять (и все равно будет некоторый период, когда не будет работать, радует что youtube вносит изменения не всем сразу, а значит есть шансы что обновление приедет быстрее)

    yt-dlp позволяет не только скачивать, но и получить прямую ссылку (если это в принципе возможно) которую можно использовать в ffmpeg/vlc или любом другом плеере, который можно реализовать самому или встроить в приложение.

    p.s. приложение в виде библиотеки нет, есть только прослойки
    Ответ написан
  • Как в Python удалить текст до определённых символов?

    @rPman
    .find ищет слева направо, а тебе нужно .rfind, это вернет номер искомого символа ':' с конца
    Что бы вырезать с конца строки нужное количество символов нужно взять со знаком минус s[-index:]
    Ответ написан
  • Как проверить доступность списка IP:Port из txt-файла?

    @rPman
    Обязательно на python?

    с помощью nmap можно проверить работает или нет, а с помощью parallel можно запускать одновременно несколько проверок (в данном пример он будет пытаться держать запущенными 10 nmap, по завершении одного, будет брать следующий ip:port и запускать новый экземпляр)
    parallel -j10 --colsep ':' '
        nmap_result=$(nmap -p {2} {1} | grep "open")
        if [ -n "$nmap_result" ]; then
            echo "{1}:{2} - OPEN" >> results.log
        else
            echo "{1}:{2} - CLOSED" >> results.log
        fi
    ' < servers.txt
    Ответ написан
    Комментировать
  • PyTorch занимает много памяти. Как оптимизировать?

    @rPman
    Твоя видеокарта всего 4гб, откуда ты взял 7гб всего?
    Скорее всего твой датасет не помещается в память видеокарты... уменьши размер батча (вообще то его увеличивают чтобы значительно ускорить обучение, но тебе 'не до жиру') до 1.
    Перейди на fp16, это уменьшит размер весов модели (правда если она уже уменьшена, дистиллирована и прочее, это может помешать обучению)
    training_args = TrainingArguments(
        fp16=True,

    Так же можно поделить свою обучающую выборку на части и обучать сетку по ее частям (это замедляет процесс и ухудшает но все еще лучше чем на процессоре все делать)
    training_args = TrainingArguments(
        gradient_accumulation_steps=4,
    Ответ написан
    Комментировать