Задать вопрос
  • Ошибка при компиляции python в Termux на Android, как исправить?

    VectorASD
    @VectorASD
    ## ️ Начальная настройка

    Для начала нужно правильно собрать Python:

    ```bash
    make distclean
    bash configure --prefix=$PREFIX --enable-optimizations
    ```

    - `$PREFIX` нужен для того, чтобы `make install` понимал, куда ставить результат сборки.
    - `--enable-optimizations` используется на протяжении всего этого руководства.

    ---

    ## ⚡ Использование параллельной сборки

    Полезно запускать:

    ```bash
    make -j$(nproc)
    ```

    Это распределяет нагрузку между всеми 8 ядрами процессора, вместо того чтобы всё шло в один поток.

    ---

    ## Ошибка отсутствия архиватора `ar`

    Если появляется ошибка об отсутствии архиватора `ar`, установи нужный пакет:

    - Для сборки через GCC:
    ```bash
    pkg install binutils
    ```

    - Для сборки через Clang:
    ```bash
    pkg install binutils-is-llvm
    ```

    ---

    ## ⚙️ Исправление специфичных ошибок платформы

    В рабочей директории репозитория CPython есть файл `pyconfig.h`.

    Просто допиши в конец (либо, как я, ищи каждый параметр вручную и закомментируй соответствующий `#define`):

    ```c
    #undef HAVE_SEM_CLOCKWAIT
    #undef HAVE_PTHREAD_GETNAME_NP
    #undef HAVE_PTHREAD_SETNAME_NP
    // Один лишь Modules/posixmodule.c нарожал этих ошибок:
    #undef HAVE_STATX
    #undef HAVE_FEXECVE
    #undef HAVE_GETLOGIN_R
    #undef HAVE_GETLOADAVG
    #undef HAVE_PWRITEV2
    #undef HAVE_PREADV2
    #undef HAVE_GETPWENT
    ```

    Это особенность Termux: компилятор GCC просто не снабжён этими функциями
    Если будут проблемы — смотри по коду, какие `#if` или `#ifdef` туда ведут. Обычно имя отсутствующего символа дублируется в переменной `HAVE_...`.

    ---

    ## ⚠️ Ловушка: `#define ... 0` не срабатывает

    ```c
    #define HAVE_PTHREAD_GETNAME_NP 0 // ❌ Не работает
    #undef HAVE_PTHREAD_GETNAME_NP // ✅ Работает
    ```

    Я думал, что разработчики накосячили, но на практике нужно смотреть на комментарий перед `#define`, заканчивающийся на:
    `", and to 0 if you don't."`
    Хотя это не всегда объективно — разные разработчики просто не договорились…

    ---

    ## Запуск Python из репозитория CPython

    Чтобы запустить собранный Python:

    ```bash
    ./python
    ```

    Если прописать просто `python`, запустится версия Termux — на момент написания это 3.12.9.

    ---

    ## Грубый, но рабочий способ перезаписи (без `make install`, PGO и симлинков)

    ```bash
    export PATH="$PWD:$PATH"
    python --version
    # Вывод: Python 3.15.0a1+
    ```

    Работает только в текущей сессии и без поддержки `pip`.

    ---

    ## Заметки по тестированию

    На этапе тестирования некоторые модули провалились. Тест 41/43 вообще свалил весь процесс тестировщика из-за ограничений безопасности Android.

    Пример: проверка `re`

    ```python
    >>> import re
    >>> dir(re)
    ['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', ...]
    >>> print(re.findall(r'\d+', 'abc123def456'))
    ['123', '456']
    ```

    Как видно, `re` работает. Ошибка теста заключалась в вызове `fork()` или аналогичной системной функции, не поддерживаемой Android — можно игнорировать.

    ---

    ## Очистка PGO-тестов перед `make install`

    Перед запуском `make install` открой:

    ```
    Lib/test/libregrtest/pgo.py
    ```

    Удалите все тесты, которые валятся. Особенно `'test_time'` — он вообще валит процесс.
    Можно удалить все, но лучше оставить первые 7 — они быстрые и проходят успешно.

    Это позволит сохранить режим `--pgo` (включается через `--enable-optimizations`) и при этом корректно установить Python.

    Да, сборка повторится… и без параметра `-j`
    Зато Python будет хорошо оптимизирован

    ---

    ## Симлинки

    ```bash
    ln -sf $PREFIX/bin/python3.15 $PREFIX/bin/python
    ln -sf $PREFIX/bin/pip3.15 $PREFIX/bin/pip
    ```

    ---

    ## ✅ Финальная проверка (вне репозитория CPython)

    ```bash
    python --version
    pip --version
    ```

    На момент написания комментария был собран Python 3.15.0a1.
    Написано
  • Как посмотреть по какому логину-паролю пытаются зайти по ssh в Linux?

    VectorASD
    @VectorASD
    Например бесконечный источник пополнения баз для брута ;'-} Только самые не умные челики будут добавлять в базы рандомные пароли, т.к. шанс их попадания равен 1 к ∞ Я же не знаимаюсь этим, но интересно, какая гадость туда вливается 24/7 (т.к. мой сайт давно ищут модоюзеры по моему нику, он уже давно в поисковой системе первой строкой), а тем более что из них чаще!
  • Чем отличаются прокси "IPv4, HTTPS, Socks5, Socks4" друг от друга и какой из них лучше?

    VectorASD
    @VectorASD
    Отличная инфа! Теперь точно ясно, что socks 4 лучше всего юзать, а именно элитки ;'-} socks4 в принципе позволяет сокеты создавать с посредником в виде VPN... Подходит для игровых ботов даже ;'-} а вот https чисто подходит для веб ботов, но им точно не получится работать с сокетами на прямую ;'-}
  • Как запретить зумить страничку пальцами, когда пользователь смотрит сайт с телефона?

    VectorASD
    @VectorASD
    Андрей, эм... а о чём идёт речь?) Если это и не сайт с текстовым контентом и не сайт с игрой на холсте?)))
  • Как запретить зумить страничку пальцами, когда пользователь смотрит сайт с телефона?

    VectorASD
    @VectorASD
    В играх на холсте, где приходится часто жать на кнопки ходьбы, плохим тоном (КРАЙНЕ плохим тоном!!!) будет НЕ вводить блокировку автозама. Так что всё зависит от ситуации ;'-}
  • Как отключить горячие клавиши в Chrome?

    VectorASD
    @VectorASD
    Ctrl + W срабатывает в игре, когда пытаешься в присядку идти вперёд, так что это большаааааая проблема, а если поменять Ctrl с шифтом, то уже не сможешь бежать вперёд -_- JS способ с evt.preventDefault() тоже не работает