• Почему приложение, собранное с помощью Pyinstaller, не находит добавленный в сборку исполняемый файл?

    Vindicar
    @Vindicar
    RTFM!
    subprocess.Popen(("./ffmpeg.exe", …))
    Ты просишь запустить файл ffmpeg.exe, находящийся в текущем каталоге. Текущий каталог может и не совпадать с каталогом, в который pyinstaller распаковал твоё приложение. Почитай, что такое относительный и абсолютный путь.

    Чтобы получить этот каталог, попробуй такой приём из документации:
    import sys
    from pathlib import Path
    
    if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):  # мы запакованы pyinstaller?
        TEMP_DIR = Path(sys._MEIPASS).resolve()  # да - берем каталог приложения
    else:  # нет, мы не запакованы
        TEMP_DIR = Path(sys.argv[0]).parent.resolve()  # берем просто каталог скрипта
    # resolve() делает путь абсолютным, так что при смене текущего каталога путь не сломается
    ffmpeg_path = str(TEMP_DIR / "ffmpeg.exe")  # предполагаю, что ffmpeg лежит не в подкаталоге
    ffmpeg = subprocess.Popen((ffmpeg_path, …))
    Ответ написан
    1 комментарий
  • Что выбрать или Django vs Flask?

    @sormon
    инженер-программист =)
    На сегодняшний день ситуация такова, что Django гораздо сильнее востребован на рынке, нежели Flask. Однако, для написания действительно сложных боевых проектов лучше брать Flask, в частности, из-за достаточно слабого ORM в Django, а так же из-за того, что Django очень монолитный фреймворк, что будет вызывать проблемы в сложных случаях, когда нужно больше, чем дает Django, или то, что он предлагает, в какой-то части не подходит для задачи. Здесь мощь Flask заключается в том, что он позволяет использовать разные инструменты для задач, связывая их, как нужно, иногда даже реализовывая компоненты под себя. Но, накладные расходы здесь будут — написание обвязки, необходимость уметь проектировать систему и более глубоко понимать, что происходит (но в больших и сложных проектах это и так необходимо.)
    Ответ написан
    Комментировать
  • Как превратить подстроку вида "min ( a, b )" в "a min b"?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Поскольку случай - очень простой, то он решается шаблоном. Но если вместо а или б может быть
    тоже выражение - тогда нужно определять свою грамматику. Например:
    min ( min(a,b) , min (c,d) )
    Тогда умные дядьки-теоретики берут язык описания грамматик. EBNF типа. И пытаются
    свой новояз описать в терминах например EBNF https://en.wikipedia.org/wiki/Extended_Backus%E2%8...
    Описывают что такое число. Какое оно. Отрицательное? Вещественное? Экспоентциальное?
    Короче надо описать вообще все что может быть. Описывают функцию минимума.
    Потом по этой грамматике создают парсер. Программно. И парсер на выходе выдает
    дерево. Где корень - это вся грамматика а на листиках будут висеть числа. Или терминалки не помню
    как они это называют. И вот когда ты уже получил это чортово дерево - можно ПРИСТУПАТЬ ко второй
    части задачи - а именно к транформации в инфиксную форму. Но ты сначала реализуй хотя-бы первую
    часть.

    Это все теория и она требует погружения. Я думаю что эта задача и ей подобные в частных случаях
    решаются проще. Если например твой язык поддерживает регулярки - то перечисли макс. число
    вариантов что будут на входе и выбери через матчинг подходящий. Это - быстрее.
    Ответ написан
    Комментировать
  • Как превратить подстроку вида "min ( a, b )" в "a min b"?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Решение попроще, за квадрат:
    Пропустили ведущие и trailing пробелы, проверили, что строка начианется с "min" (иначе ничего делать не надо, возвращаем все).
    Потом заведите счетчик открытых скобок, пройдитесь до первой запятой внутри одной пары скобок. Рекурсивно преобразуйте левую часть, добавьте к этому min и результат рекурсивного преобразования правой части (от зяпятой до закрывающей скобки в конце).

    Решение поумнее, за линию:

    Рекурсивная функция будет принимать строку и индекс того места, с которого надо обработать выражение. Возвращать будет результат преобразования и индекс конца обработанного выражения. Важно, обработаться может только часть строки.

    Итак, функция, опять же, проверяет, что есть min. Если нет - возвращает всю строку до первой "," или непарной ")" - нужен счетчик открытых скобок.
    В противном случае, пропускает "min", "(". Рекурсивно преобразовывает от этой позиции. Потом смотрит, что после позиции, которую вернула рекурсивная функция, лежит ",". Иначе - ошибка. Добавляет min к ответу, Рекурсивно преобразовывает оставшееся и добавляет к ответу. Проверяет, что дальше после позиции где закончила обработку рекурсивная функция лежит ")". Возвращает следующую за этим позицию.

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

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Ответ написан
    Комментировать
  • Почему Golang устанавливает пакеты не туда?

    udjin123
    @udjin123
    PHP, Golang, React
    С версии 1.6 включены по дефолту модули, регулируется этой GO111MODULE переменной окружения, если нужно старое поведение то установите ее off, подробнее тут https://go.dev/blog/go116-module-changes
    Но лучше мигрировать на модули
    Ответ написан
    3 комментария
  • Что значит ошибка vk_api: user is blocked?

    yupiter7575
    @yupiter7575
    Python программист
    Да!
    Ответ написан
    Комментировать
  • Почему threading останавливается после запуска нескольких потоков?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Во-первых, надо убрать перехват широких исключений. Во-вторых, надо добавить побольше отладочного вывода и погонять под дебагером, чтобы понять, что именно значит "просто перестает выполняться". Напрашивающееся предположение, что somesite.com обнаруживает парсинг, блокирует доступ, в функции parse возникает исключение, которые вы молча проглатываете и поток завершает работу.
    Ответ написан
    Комментировать
  • Как сделать почтовый сервер для принятия входящей почты?

    sashkets
    @sashkets
    Прекратил отвечать после 24.02.2022
    гайда Вам никто не даст, а вот если эту работу разбить на этапы то можно много постичь по ходу

    -ДНС
    -Сервисы smtp, imap, pop3
    -Courier-imap или Dovecot?
    -Учетные записи пользователей системные или виртуальные? Виртуальные удобнее, да и база данных у Вас уже настроена и работает. Если вдруг потребуется прогонять входящую почту через фильтр procmail, то придется вводить системные учетные записи, потому что с виртуальными procmail не работает
    -Настройка шифрования. Сервисы smtps, imaps, pop3s
    -Настройка smtp-авторизации
    -Установка и настройка антивируса и антиспама
    -Установка веб-интерфейса для работы с почтой
    -Фильтр входящей почты procmail. Необязательно, но ознакомиться стоит

    на полгода достадочно
    Ответ написан
    2 комментария
  • Как сделать почтовый сервер для принятия входящей почты?

    @q2digger
    никого не трогаю, починяю примус
    для начала советую почитать про DNS. Что такое MX записи в домене и как они работают. После этого сразу появится понимание, что обычный стандартно запущенный постфикс с открытым 25 портом сразу может и принимать приходящую на него почту.
    Ответ написан
    Комментировать
  • Как взять фото из вк с помощью vk api и JavaScript?

    xo6a
    @xo6a
    php разработка 5+ лет
    vk api - это php. так?

    <?php
    $owner_id = id пользователя где размещена фото или id группы (если id группы, тогда это отрицательное число) например: -78208963
    $album_id = id альбома
    
    //делаем запрос к апи вк
    $resp = file_get_contents('https://api.vk.com/method/photos.get?owner_id='.$owner_id.'&album_id='.$album_id.'&count=7&v=5.31');
    //count - количество
    //v - версия
    
    //декодируем полученный json массив
    $data = json_decode($resp, true);
    
    //вывод фоток в ширину 604
    foreach($data["response"]["items"] as $photo){
    echo('<div class="img" style="background-image:url('.$photo["photo_604"].')"></div>');
    }


    что вы будете делать дальше JavaScript - ваше дело, главное фотки есть в хтмл
    Ответ написан
    2 комментария