Задать вопрос
  • Можно ли на Python написать простой сайт без фреймворков?

    Vindicar
    @Vindicar
    RTFM!
    То есть, по аналогии с PHP создаём условный index.py, в нём роутинг на несколько url и включаемые файлы.

    Роутинг реализуется фреймворками. Ты или пишешь HTTP-сервер с нуля (ну или сам реализуешь CGI/WSGI), прежде чем добраться до собственно логики сайта, или поручаешь это фреймворку.
    Ответ написан
    Комментировать
  • Почему антивирус ругается на exe Python?

    Vindicar
    @Vindicar
    RTFM!
    Это постоянно так. Используй более старую версию упаковщика, она уже должна быть в белых списках. Но проблемы всё равно могут быть.
    Ответ написан
  • Как создать установщик?

    Vindicar
    @Vindicar
    RTFM!
    Стэковерфлоу не согласен. Можно создать ярлык в папке автозагрузки у пользователя.
    Если нужен выбор, создай компонент и привяжи задачу к нему.
    [Components]
    Name: "main"; Description: "Программа"; Types: full; Flags: fixed
    Name: "autorun"; Description: "Автозапуск"; Types: full
    
    [Icons] 
    Name: "{userstartup}\My Program"; Filename: "{app}\MyProg.exe"; Component: autorun

    Ну или для всех пользователей (если под админом). Аналогично, можно закинуть ключ в нужную ветку реестра.
    Просто нужно немножечко напрячься и погуглить.
    Ну или если пробовали и не вышло, то подробно это написать в вопросе.
    Ответ написан
    3 комментария
  • Можно ли узнать типы сигнатуры std::function?

    Vindicar
    @Vindicar
    RTFM!
    Обычно ты должен УЖЕ знать сигнатуру функции, чтобы принять ссылку на неё. Иначе как ты её вызовешь?
    Ответ написан
  • Провайдер блокирует vless vpn, как обойти блокировку?

    Vindicar
    @Vindicar
    RTFM!
    Если ходить через прокси на ресурсы в россии - пустя несколько дней твой сервер попадает в серый список, и ты ловишь замедление трафика до него.
    Более того, если у тебя большой процент трафика идёт через твой сервер - тоже прекрасно ловишь замедление.

    Так что позарез нужно настраивать клиент-прокси так, чтобы пускал через сервер только заблокированное, а в X-UI ставить галки "не ходить на ресурсы из Китай/Ирана/России".
    Как долго сервер висит в сером списке - я фз, можешь у хостера заказать смену IP адреса на новый, но при неосторожном использовании новый IP улетит туда же. Может, стоит временно использовать клиентское решение типа goodbyedpi, чтобы про сервер "забыли".
    Ответ написан
    4 комментария
  • Долгая обработка SQL запроса?

    Vindicar
    @Vindicar
    RTFM!
    Какое лютое извращение.
    user_parsing_ok = cur.fetchall()
        korteg = ()
        for k in user_parsing_ok:
            korteg += k
            step += 1

    Во-первых, вы вытаскиваете 3 миллиона записей в память как питоновские объекты. Это не очень хорошая идея.
    Во-вторых, вместо того, чтобы по-человечески сделать
    korteg = tuple(item[0] for item in user_parsing_ok)
    вы делаете конкатенацию кортежей по одному. Напомню, что при конкатенации создаётся новый кортеж - так что при добавлении трёхмиллионного элемента у вас в памяти будет один кортеж с 2999999 элементами и один кортеж с 3000000 элементами. Это дело будет люто, бешено, неиллюзорно жрать память, а значит, свопиться на диск. Что не прибавит скорости.
    Как написали выше, просто используйте подзапрос. Вам совершенно незачем таскать эти айдишники из БД в питон, а потом из питона в БД. Пусть они обрабатываются только в рамках БД.
    Ответ написан
    Комментировать
  • Как настроить Nekoray оптимальным образом?

    Vindicar
    @Vindicar
    RTFM!
    Добавляешь правило по доменам вида
    domain:google.com,
    domain:googleusercontent.com,
    domain:googlevideo.com,
    domain:gstatic.com,
    domain:youtu.be,
    domain:youtube.com,
    domain:ytimg.com

    и ставишь тег прокси.
    Ниже добавляешь правило "port 0-65535" и ставишь тег direct.
    Как-то так.
    Ответ написан
  • Мультиязычность на python как стоит оптимизировать?

    Vindicar
    @Vindicar
    RTFM!
    Ну кэшировать результаты приведённого кода, пожалуй, стоит, всё же открывать-закрывать файл на каждый чих - не лучшая идея. functools.lru_cache в помощь.
    Но вообще, если встаёт вопрос "оптимизировать или нет", то первое, что нужно сделать - понять, что именно стоит оптимизировать. Если у тебя заметная доля времени выполнения тратится на указанный код, то да, стоит.
    Профилируй свой код (можно с помощью модулей profile/cProfile или стороннего профилировщика), и выясняй.
    Ответ написан
    Комментировать
  • Что нужно сделать чтобы код заработал как надо?

    Vindicar
    @Vindicar
    RTFM!
    проверяет условие 42 <= r1 and r2 <= 88

    if 42 <= r1 <= 88 and 42 <= r2 <= 88:

    Это разные условия. Какое из двух тебе нужно?
    И если на то пошло, какой именно неправильный ответ выдаёт код? Не находит решение, когда оно должно быть? Или находит решение, когда его не должно быть? Или находит неправильное решение?
    Ответ написан
    2 комментария
  • Настройка OpenVPN?

    Vindicar
    @Vindicar
    RTFM!
    А сервер хостится в какой стране? Сейчас openvpn многие провы режут напрочь, особенно если за рубеж.
    Попробуй с клиента сделать ping -t ip.сервера.внутри.vpn и подожди минуток 5. Если много потерянных пакетов - то проблема с коннектом до самого VPN, а не с NAT.
    Ответ написан
  • Как убрать лишнюю информацию из json ответа?

    Vindicar
    @Vindicar
    RTFM!
    Как написали выше, это журнал работы. Скорее всего основан на встроенной либе logging.
    Получаешь объект журнала через logging.getLogger('тут имя журнала которое ты замазал'), а затем на нём делаешь .setLevel(logging.ERROR), чтобы выводились только ошибки.
    Ответ написан
    Комментировать
  • Process finished with exit code 0 Telebot Python в чем ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Отступы в питоне важны!
    У тебя всё, начиная с @client.event async def on_ready(): попало внутрь обработчика события.
    Как следствие, бот не стартует, пока не выполнится обработчик, а обработчик не выполнится, так как бот не стартовал. Программа доходит до конца, решает "ну, что сказали сделать - я сделала" и завершается нормально, т.е. с кодом 0.
    Сдвинь соответствующий участок кода (начиная с указанного) влево.
    Ответ написан
  • Каким образом запустить и провести калькуляции с файлом excel, не открывая excel?

    Vindicar
    @Vindicar
    RTFM!
    Использовать COM (в питоне это пакет comtypes, в других языках есть свои средства) чтобы обращаться к средствам автоматизации Excel. По сути, это то же самое апи, которое доступно через макросы или скрипты Visual Basic. Но это будет требовать установленного на машине Excel для работы. Так что это скорее костыль, чем решение.
    Ответ написан
    2 комментария
  • Почему input() не сохраняет значения в списке?

    Vindicar
    @Vindicar
    RTFM!
    input() не сохраняет значения в списке

    Всё оно сохраняет, просто вот эта строка - полная чушь.
    res_int = ''.join(i if i.isdigit() else ' ' for i in s).split()

    У тебя s - список строк. Ты заменяешь на пробелы все строки в списке, которые содержат что-то кроме цифр (а это все строки в твоём списке!), затем соединяешь строки в одну и делишь их по пробелу. Конечно, у тебя получится пустой список в итоге.
    У меня такое чувство, что этот код вообще предполагал, что в s будет одиночная строка, а не список - но даже тогда он не сделает что тебе надо.

    Нужно каждую строку в s разделить по символу "," и все элементы полученного списка, кроме нулевого, превратить в числа. Дальше уже будет просто.
    Ответ написан
  • Почему json файл не создается через python в docker?

    Vindicar
    @Vindicar
    RTFM!
    А где ты файл-то создаёшь? На подмонтированном volume? Или где попало?
    Вообще изменения в файловой системе контейнера не сохраняются при остановке. Тебе нужен volume (или иной похожий механизм), чтобы сохранить данные между перезапусками контейнера.
    Читай про docker persistence.
    Ответ написан
  • Как перевести блоки кода в SPA приложении?

    Vindicar
    @Vindicar
    RTFM!
    1. Регулярками выдернуть содержимое переменных
    2. Для поиска текстовых фрагментов можно использовать модуль xml.dom.pulldom, хотя тут может и BeautifulSoup справится.
    3. Фрагменты уже отправляешь в желаемый сервис переводчик. Возможно, стоит их отправлять группами с разделителем.
    4. Конструируешь итоговый код - хоть поиском-заменой, хоть постепенной записью нового XML. А может, сгенерируешь сразу код с поддержкой локализации, на будущее.
    Ответ написан
  • Как протестировать код как Я.Контест?

    Vindicar
    @Vindicar
    RTFM!
    Втупую - subprocess для запуска дочернего процесса с перехватом стандартного ввода вывода. А дальше какая-то база, содержащая набор пар "ввод - ожидаемый вывод" для скрипта.
    Веселье начнётся, когда ты поймёшь, что в запускаемом скрипте может быть всё, что угодно, и его надо выполнять в песочнице, где можно контролировать какие модули он импортирует.
    Ответ написан
  • Как реализовать отложенное сообщение?

    Vindicar
    @Vindicar
    RTFM!
    используй асинхронную библиотеку для бота. Асинхронные функции могут приостановить своё выполнение и отдать процессорное время другим, которые готовы выполняться. Тогда, как написали выше, всё решается вызовом asyncio.sleep(). Но это предполагает, что ты можешь бота переписать на асинхронный подход.

    Если же нет, придётся использовать потоки, в расчёте на то, что бот потокобезопасен.
    Ответ написан
  • Ошибка "cannot pickle '_tkinter.tkapp' object" при использовании Multiprocessing, почему?

    Vindicar
    @Vindicar
    RTFM!
    Потому что multiprocessing - это не магия, а инструмент с ограничениями.
    В частности, у каждого дочернего процесса полностью своя память. Никаких общих объектов! Любые данные, передающиеся между процессами, упаковываются встроенным модулем pickle, и распаковываются на той стороне. Как следствие, есть довольно ограниченный набор типов данных, которые можно передавать как аргумент, или возвращать как результат из другого процесса. Окна ткинтера в этот набор не входят, о чём тебе и сообщает ошибка.

    Используй пару multiprocessing.Queue или SimpleQueue для коммуникации с работающим процессом. Одна очередь должна содержать команды от главного процесса дочернему, а другая - оповещения от дочернего главному. Сосредоточь всю работу с GUI в главном процессе, а для периодической проверки наличия новых оповещений в очереди используй метод root.after().

    Ну и да, "принудительно остановить" - это вообще не лучшая идея, и не должно быть нормальным подходом. Перепиши свои функции так, чтобы они мониторили какой-нибудь multiprocessing.Event (ну или threading.Event, если хочешь работать в потоках), и останавливались, когда он окажется взведён.
    Ответ написан
    2 комментария
  • Построение игры в монетку с вариативностью и возможностью выбора на Python?

    Vindicar
    @Vindicar
    RTFM!
    Ошибки две. Первая, вместо двух отдельных if тебе нужна цепочка if-elif-else, а лучше - одна пара if-else с правильно написанным условием победы. Второе, ввод догадки пользователя должен быть ПЕРЕД проверкой, а не после и не внутри неё.
    Ну и пока что нет изменения баланса, но это ты уже допишешь.
    Ответ написан
    Комментировать