```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 и симлинков)
Как видно, `re` работает. Ошибка теста заключалась в вызове `fork()` или аналогичной системной функции, не поддерживаемой Android — можно игнорировать.
---
## Очистка PGO-тестов перед `make install`
Перед запуском `make install` открой:
```
Lib/test/libregrtest/pgo.py
```
Удалите все тесты, которые валятся. Особенно `'test_time'` — он вообще валит процесс.
Можно удалить все, но лучше оставить первые 7 — они быстрые и проходят успешно.
Это позволит сохранить режим `--pgo` (включается через `--enable-optimizations`) и при этом корректно установить Python.
Да, сборка повторится… и без параметра `-j`
Зато Python будет хорошо оптимизирован
Например бесконечный источник пополнения баз для брута ;'-} Только самые не умные челики будут добавлять в базы рандомные пароли, т.к. шанс их попадания равен 1 к ∞ Я же не знаимаюсь этим, но интересно, какая гадость туда вливается 24/7 (т.к. мой сайт давно ищут модоюзеры по моему нику, он уже давно в поисковой системе первой строкой), а тем более что из них чаще!
Отличная инфа! Теперь точно ясно, что socks 4 лучше всего юзать, а именно элитки ;'-} socks4 в принципе позволяет сокеты создавать с посредником в виде VPN... Подходит для игровых ботов даже ;'-} а вот https чисто подходит для веб ботов, но им точно не получится работать с сокетами на прямую ;'-}
В играх на холсте, где приходится часто жать на кнопки ходьбы, плохим тоном (КРАЙНЕ плохим тоном!!!) будет НЕ вводить блокировку автозама. Так что всё зависит от ситуации ;'-}
Ctrl + W срабатывает в игре, когда пытаешься в присядку идти вперёд, так что это большаааааая проблема, а если поменять Ctrl с шифтом, то уже не сможешь бежать вперёд -_- JS способ с evt.preventDefault() тоже не работает
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Для начала нужно правильно собрать 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.