• Почему docker при запуске не может найти пакет xdebug?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Пакет называется php-xdebug, а не xdebug, но даже если указать имя правильно пакет не установиться, потому что в репозитрии его на самом деле нет. Устанавливай его из pecl или используй Debian в качестве базового образа и устанавливай пакеты из репозитория https://packages.sury.org/php/ (я бы даже рекомендовал делать так потому что образ получиться меньше размером).
    Ответ написан
    Комментировать
  • Остаток от деления в Python -1%5?

    По определению деления. Школа 3 класс.
    Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
    Остаток всегда больше нуля.
    При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

    Более формально это выглядит так:

    Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

    a - делимое
    b - делитель
    q - частное (целое)
    r - остаток

    Вот и получается
    1 = 0 * 5 + 1
    -1 = -1 * 5 + 4

    UPD: в python это не совсем так. На самом деле в Python действительно релизован mod, как говорит Rsa97, но у этой операции нет чёткого определения, по тому в разных языках оно реализовано по разному:
    https://en.wikipedia.org/wiki/Modulo
    q = floor(a/b)
    r = a - b*q

    В первом случае: q=0, r=1
    Во втором: q=-1,r=4
    (в принципе то же самое)
    Интересное начинается, если делитель отрицательный:
    Если взять a=1, b=-5, то тогда r=-1, q=-4
    А вот при обычном делении с остатком: r=0, q=1
    Ответ написан
    Комментировать
  • Как в telegra.ph вставить блок кода с подсветкой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С чего вы решили, что не сделали? Набираете ``` и вперёд.
    Ответ написан
  • Как установить нужную версии aiogram PyCharm?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    $ cd /d project
    $ python -m venv venv
    $ venv\Scripts\activate
    $ pip install aiogram==2.25.2
    $ pip install aiohttp==3.8.1

    Либо, попробуйте более старую версию aiohttp:
    $ pip install aiogram==2.25.2
    $ pip install aiohttp==3.7.4

    Затем, под виртуальным окружением (как под грибами), запускаем скрипт, визуально, это будет выглядеть примерно так:
    user@PC C:\project
    $ venv\Scripts\activate
    (venv) user@PC C:\project
    $ python main.py

    P.S. команды под Windows, для Linux некоторые из них будут слегка отличаться.
    Ответ написан
    3 комментария
  • Нету DPR в инструментарии разработчика Google Chrome, как сделать?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Ответ написан
    Комментировать
  • Почему изменяется узел, который я создаю и засовываю в массив?

    @Everything_is_bad
    Стандартная ошибка новичка в
    def __init__(self, p_type, p_text, p_mas_connections = []):
    правильно p_mas_connections=None, а далее в коде например так
    self.mas_connections = [] if p_mas_connections is None else p_mas_connections

    гуглить "python mutable default argument"
    Ответ написан
    4 комментария
  • Как можно оптимизировать этот код?

    Vindicar
    @Vindicar
    RTFM!
    Для начала определи, что у тебя занимает время - скачивание, или парсинг. Подходы будут разные.
    Если хочется в лоб решать задачу - то multiprocessing в руки, даёшь дочернему процессу URL, он тебе возвращает структуру данных. Главный процесс раздаёт URLы и собирает ответы в какое-то итоговое хранилище.
    Пример работы с пулом процессов.
    Ответ написан
    Комментировать
  • Как можно оптимизировать этот код?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Все не смотрел, но простыни типа:
    def get_contact(ids):
        for id in ids:
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for data in data_list:
                        main_data['Full_name'].append(data.get('fullName', 'None') if data.get('fullName') else 'None')
                        main_data['Contact'].append(data.get('contact', 'None') if data.get('contact') else 'None')
                        main_data['Position'].append(data.get('position', 'None') if data.get('position') else 'None')
                        main_data['Phone_number'].append(data.get('phoneNumber', 'None') if data.get('phoneNumber') else 'None')
    
                else:
                    main_data['Full_name'].append('None')
                    main_data['Contact'].append('None')
                    main_data['Position'].append('None')
                    main_data['Phone_number'].append('None')
            except requests.Timeout:
                main_data['Full_name'].append('None')
                main_data['Contact'].append('None')
                main_data['Position'].append('None')
                main_data['Phone_number'].append('None')


    пишутся гораздо проще. Да и структуру данных я бы поправил. К примеру простыня выше заменяется более лаконичным кодом:
    main_data = []
    ...
    
    def get_contact(ids):
        for id in ids:
        	current_data = {'Full_name': 'None', 'Contact': 'None', 'Position': 'None',  'Phone_number': 'None'}
            template = f'https://etender.gov.az/api/events/{id}/contact-persons'
            try:
                response = requests.get(template, timeout=20)
                if response.status_code == 200:
                    data_list = response.json()
                    for (elem_to, elem_from) in [
                         ('Full_name', 'fullName'),
                         ('Contact', 'contact'),
                         ('Position', 'position'),
                         ('Phone_number', 'phoneNumber')
                    ]:
                    	current_data[elem_to] = data.get(elem_from, 'None')
             except requests.Timeout:
                   pass
            main_data.append(current_data)
    Ответ написан
    Комментировать
  • Как сделать логи в python?

    @Everything_is_bad
    Логи надо делать стандартным модулем logging, а не писать собственные кривые костыли
    Ответ написан
    2 комментария
  • Как автоматизировать telegramm с помощью python?

    @Everything_is_bad
    срочно нужна библиотека
    это не сюда, это на фриланс
    Ответ написан
    Комментировать
  • Как хранить данные таблицы содержащие описание множества товаров без ошибки "ValueError: All arrays must be of the same length"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Все очень просто, когда ты пытаешься создать фрейм, у тебя списки разной длинны получаются. Вот код который выдаст точно такую же ошибку.
    (
        pd.DataFrame({
            'A':[1,2,3],
            'B':[100,200]
        })
    )

    А вот исправленная версия кода
    (
        pd.DataFrame({
            'A':pd.Series([1,2,3]),
            'B':pd.Series([100,200])
        })
    )
    Не достающий элемент он заполнит пропущенным значением.
    Ответ написан
    1 комментарий
  • Почему не совпадают хэши тг авторизации?

    @Everything_is_bad
    Не совпадают только по одной причине, ты их неправильно посчитал, разбираться в твоих вычислениях большинству будет лень, так что давай самостоятельно, можешь посмотреть как это делает тот же aiogram
    Ответ написан
    Комментировать
  • Как настроить del в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну класс чуть переделать желательно бы. У тебя аргументы хранятся как кортеж (не мутабельный объект). Сменить для начала на список (мутабельный тип), и затем определить подходящий дандер метод. Например как то так.
    class MyClass():
        def __init__(self, *args):
            self.args = list(args)  
    
        def __delitem__(self, key):
            if key in self.args:
                self.args.remove(key)
    
    example = MyClass('ab', '12', 100, None)
    print(example.args)
    del example['12']
    print(example.args)

    Ну и там покрыть исключением если ключа нет и т.д.
    Ответ написан
    1 комментарий
  • Как импортировать контакты (клиентов из CRM) в группу Телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такого способа нет. Поиск в Телеграме такого большого количества номеров гарантирует бан аккаунта. Кроме того, у многих пользователей номер может быть скрыт настройками приватности.

    Приавильное решение - разослать пользователем SMS со ссылкой на канал. Также канал пихать на сайт, в личный кабинет, письма о заказах, визитки менеджеров итд итп. Параллельно не забывать вести канал интересным контентом, не очень редко, чтобы канал не казался заброшенным, но не слишком часто, чтобы пользователей не задолбало и они не отписались (тем паче сейчас почти любой пользователь подписан как минимум на пару-тройку каналов заведомо интереснее вашего).
    Ответ написан
    Комментировать
  • Подойдет ли backend на python?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    какой фреймворк для подобной проблемы

    Django + DRF/Ninja + Nginx.
    Слышал про GIL, но не знаю, будут ли из-за него трудности.

    При средних нагрузках - будут, но обходится это относительно не сложно (многопроцессорность или внешние библиотеки). При больших нагрузках Python не используют.
    Справится ли этот backend с нагрузкой до 1000 запущенных процессов (операций работы с файлами, обрабатываемых на сервере единовременно)?

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

    Если есть сомнения в Ваших возможностях, то Java или Go справятся с этой задачей лучше.

    Но с другой стороны, Python позволит быстро написать MVP, а узкие места потом всегда можно переписать на Go.
    Ответ написан
    4 комментария
  • Как сделать, чтобы бот работал всегда в телеграмме?

    @Everything_is_bad
    Смотрю курс на ютубе по созданию ботов с помощью библиотеки aiogram 2, но у меня самого скачана aiogram 3.
    перестать смотреть протухшие курсы, а еще лучше перестать смотреть курсы на ютубе, новички не способны найти там нормальные
    Ответ написан
    Комментировать
  • Функции в питоне. Как избавиться от None?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что возвращает функция print()?
    # s=print("Ниже нуля:", count1,'Выше нуля:',count,'Равно нулю',count2)
    s = f"Ниже нуля: {count1}, Выше нуля: {count}, Равно нулю: {count2}"

    https://stackoverflow.com/questions/28812851/why-i...
    https://stackoverflow.com/questions/7053652/why-is...
    Ответ написан
    1 комментарий
  • Можно ли писать div вне body?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    Это так.
    Браузер прожуёт довольно страшную хрень, которую напишет разработчик, но есть ровно ноль причин её писать сознательно.
    Ответ написан
    1 комментарий
  • Как исправить аномальное снижение производительности при импорте модуля в Python?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Создай 2 незвависимых процесса. Один пускай работает без ultralytics и передает
    результаты следующему процессу через файлы который уже в свою очередь
    будет подключать ultralytics.

    Современные стеки технологий очень сложны и забагованы и их иногда проще не фиксить
    а изолировать и просто принять как данность что они вот так вот работают.
    Ответ написан
    1 комментарий
  • Как получать информацию о подарках в прямых эфирах TikTok?

    Vindicar
    @Vindicar
    RTFM!
    Вот трудно вбить в гугл "API tiktok gift"?
    Вторая же ссылка ведёт на гитхаб подходящей под описание библиотеки. А там и примеры есть...
    Вторая ссылка, Карл!
    Ответ написан
    1 комментарий