Установка Python из исходного кода на Debian

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 866
Стаж: 5 лет 9 месяцев
Откуда: Вологодская область
Поблагодарили: 41 раз
Контактная информация:

Установка Python из исходного кода на Debian

Сообщение Артём Мамзиков »

Настраивал оповещение Zabbix через Telegram.
И получил ошибку при тестировании, так как на Debian 9 x64 была последняя версия Python 3.5. А требовалось минимум 3.6.
Зависимостей не так много при установке Python.
Python
Python
Вначале пробовал поставить последнюю доступную версию на момент написания Python 3.10.1.
Установка проходит все запускается, но не дает ничего загрузит через pip ругается на SSL мол установите OpenSSL.
Как оказалось OpenSSL последней версии был 1.1.0, а для Python 3.10 требуется версия OpenSSL 1.1.1.
OpenSSL
Показать
Поставим исходный openssl в /usr/src/openssl
https://wiki.openssl.org/index.php/Comp ... stallation
cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz
tar -xf openssl-1.1.1l.tar.gz
rm openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./configure --with-openssl=/usr/src/openssl-3.0.0 --enable-optimizations
make
make altinstall
В настоящее время версии Python от 3.6 до 3.9 совместимы с OpenSSL 1.0.2, 1.1.0 и 1.1.1 , версия 3.10 только от версии OpenSSL 1.1.1

Ставлю версию Python-3.9.9

Рекомендуется установить следующие пакеты
Предварительно ставим пакеты

Код: Выделить всё

apt-get install libncurses5-dev libreadline-gplv2-dev  libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev build-essential checkinstall libffi-dev xz-utils libcrypto++-dev libcrypto++6
Будут установлены следующие дополнительные пакеты:
llvm libllvm3.8 llvm-3.8 llvm-3.8-dev llvm-3.8-runtime llvm-runtime
Предлагаемые пакеты:
readline-doc llvm-3.8-doc

2 варианта libreadline-dev или libreadline-gplv2-dev

Скачать Python
Скачиваем:

Код: Выделить всё

wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
Распаковываем:

Код: Выделить всё

tar -xf Python-3.9.9.tgz
Удалить архив:

Код: Выделить всё

rm Python-3.9.9.tgz
Переходим:

Код: Выделить всё

cd Python-3.9.9
Получить справку:

Код: Выделить всё

./configure -help
Перевод для configure -help 3.10.1
Показать
`configure' настраивает python 3.10 для адаптации ко многим типам систем.

Использование: ./настройка [ОПЦИЯ]... [VAR=ЗНАЧЕНИЕ]...
Usage: ./configure [OPTION]... [VAR=VALUE]...

Чтобы назначить переменные среды (например, CC, CFLAGS...), укажите их как
VAR=VALUE (ЗНАЧЕНИЕ). Описание некоторых полезных переменных приведено ниже.

Значения по умолчанию для параметров указаны в скобках.

Конфигурация:
-h, --help отобразите эту справку и выйдите
--help=short параметры отображения, характерные для данного пакета
--help=recursive отобразите краткую справку по всем включенным пакетам
-V, --version отображение информации о версии и выход
-q, --quiet, --silent не печатайте сообщения "проверка..."
--cache-file=FILE результаты теста кэша в ФАЙЛЕ [отключено] FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create не создавайте выходные файлы
--srcdir=DIR найдите источники в каталоге [настроить каталог или `..']

Каталоги установки:
--prefix=PREFIX установите независимые от архитектуры файлы в ПРЕФИКС
[/usr/local]
--exec-prefix=EPREFIX установите файлы, зависящие от архитектуры, в ПРЕФИКС
[PREFIX]

По умолчанию "выполнить установку make install" установит все файлы в
`/usr/local/bin', `/usr/local/lib' etc. Вы можете указать
префикс установки, отличный от `/usr/local' using `--prefix',
например `--prefix=$HOME'.

Для лучшего контроля используйте следующие параметры.

Точная настройка каталогов установки:
--bindir=DIR пользовательские исполняемые файлы [EPREFIX/bin]
--sbindir=DIR исполняемые файлы системного администратора [EPREFIX/sbin]
--libexecdir=DIR исполняемые файлы программы [EPREFIX/libexec]
--sysconfdir=DIR данные только для чтения на одной машине [PREFIX/etc]
--sharedstatedir=DIR изменяемые данные, не зависящие от архитектуры [PREFIX/com]
--localstatedir=DIR изменяемые данные одной машины [PREFIX/var]
--runstatedir=DIR изменяемые данные для каждого процесса [LOCALSTATEDIR/run]
--libdir=DIR библиотеки объектного кода [EPREFIX/lib]
--includedir=DIR Файлы заголовков C [PREFIX/include]
--oldincludedir=DIR Файлы заголовков C для не-gcc [/usr/include]
--datarootdir=DIR доступная только для чтения arch.-independent данные root [PREFIX/share]
--datadir=DIR данные, независимые от архитектуры только для чтения [DATAROOTDIR]
--infodir=DIR информационная документация [DATAROOTDIR/info]
--localedir=DIR данные, зависящие от локали [DATAROOTDIR/locale]
--mandir=DIR man документация [DATAROOTDIR/man]
--docdir=DIR документация root [DATAROOTDIR/doc/python]
--htmldir=DIR html документация [DOCDIR]
--dvidir=DIR dvi документация [DOCDIR]
--pdfdir=DIR pdf документация [DOCDIR]
--psdir=DIR ps документация [DOCDIR]

Типы систем:
--build=BUILD настройка для построения на СБОРКЕ [guessed]
--host=HOST перекрестная компиляция для создания программ для запуска на ХОСТЕ [BUILD]

Дополнительные Функции:
отключить-опция-проверка игнорирования нераспознанного --включить/--с опциями
--disable-option-checking ignore unrecognized --enable/--with options
отключить-ФУНКЦИЯ не включает ФУНКЦИЮ (так же, как --включить-ФУНКЦИЯ =нет)
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] включить ФУНКЦИЮ [ARG=yes]
--enable-universalsdk[=SDKDIR]
создайте универсальную двоичную сборку. Каталог SDK указывает, какой пакет SDK
для mac OS следует использовать для выполнения сборки, см. Mac/README.rst. (по умолчанию нет)
--enable-framework[=INSTALLDIR]
создайте Python.framework вместо традиционной установки Unix. необязательный INSTALLDIR указывает путь установки.
см. Mac/README.rst (по умолчанию нет)
--enable-shared включить создание общей библиотеки Python (по умолчанию нет)
--enable-profiling enable C-level включите профилирование кода на уровне C с помощью gprof (по умолчанию нет)
--enable-optimizations включите дорогостоящую, стабильную оптимизацию (PGO и т.д.) (по умолчанию нет)
--enable-loadable-sqlite-extensions поддержка загружаемых расширений в модуле _sqlite, см. Документ/библиотека/sqlite3.rst (по умолчанию нет)
--enable-ipv6 включите поддержку ipv6 (с поддержкой ipv4), см. Документ/библиотека/сокет.rst (по умолчанию да, если поддерживается)
--enable-big-digits[=15|30] используйте большие цифры (30 или 15 бит) для длинных строк Python (по умолчанию зависит от системы)]
--disable-test-modules не создавайте и не устанавливайте тестовые модули

Дополнительные пакеты:
--with-PACKAGE[=ARG] использовать ПАКЕТ [ARG=yes]
--without-PACKAGE не используйте ПАКЕТ (так же, как --with-PACKAGE=no)
--with-universal-archs=ARCH
укажите тип универсального двоичного файла macOS, который должен быть создан. Этот параметр действителен только в том случае, если
-- включить - установлен universalsdk; параметры: ("("универсальный 2", "intel-64", "intel-32", "intel", "32-разрядный", "64-разрядный", "3-сторонний" или "все") см.
Mac/README.первый
--with-framework-name=FRAMEWORK
укажите имя для платформы python на macOS допустимо только при установке --enable-framework. см. Mac/README.rst (по умолчанию "Python")
--with-cxx-main[=COMPILER]
скомпилируйте main() и свяжите исполняемый файл Python с компилятором C++, указанным в КОМПИЛЯТОРЕ (по умолчанию $CXX)
--with-suffix=SUFFIX установите суффикс исполняемого файла в SUFFIX (по умолчанию '.exe')
--with-pydebug сборка с определением Py_DEBUG (по умолчанию нет)
--with-trace-refs включить ссылки трассировки для целей отладки (по умолчанию нет)
--with-assertions сборка с включенными утверждениями C (по умолчанию нет)
--with-lto включить оптимизацию времени соединения в любой сборке (по умолчанию нет)
--with-address-sanitizer включить детектор ошибок памяти AddressSanitizer, "как as an" (по умолчанию нет)
--with-memory-sanitizer включить детектор ошибок выделения MemorySanitizer, "msan" (по умолчанию нет)
--with-undefined-behavior-sanitizer включить детектор неопределенного поведения дезинфицирующего средства неопределенного поведения "hubsan" (по умолчанию нет)
--with-hash-algorithm=[fnv|siphash24] выберите алгоритм хэширования для использования в Python/pyhash.c (по умолчанию используется SipHash24)
--with-tzpath=<список абсолютных путей, разделенных pathsep> Выберите путь поиска часового пояса по умолчанию для zoneinfo.XPATH-ПУТЬ

--with-libs='lib1 ...' ссылка на дополнительные библиотеки (по умолчанию нет)
--with-system-expat создайте модуль pyexpat, используя установленную библиотеку экспатов, см. Документ/библиотека/pyexpat.rst (по умолчанию нет)
--with-system-ffi создайте модуль _ctypes, используя установленную библиотеку ffi, см. Документ/библиотека/ctypes.rst (по умолчанию зависит от системы)
--with-system-libmpdec создайте модуль _decimal, используя установленную библиотеку libmpdec, см. Doc/library/decimal.rst (по умолчанию нет)
--with-decimal-contextvar создайте модуль _decimal, используя локальную сопрограмму, а не локальный контекст потока (по умолчанию да)
--with-tcltk-includes='-I...' переопределение поиска для файлов, содержащих Tcl и Tk
--with-tcltk-libs='-L...' переопределение поиска для библиотек Tcl и Tk
--with-dbmliborder=db1:db2:... переопределите порядок проверки бд на наличие субд; действительный значение представляет собой строку, разделенную двоеточием,
с внутренней частью имена `ndbm", `gdbm" и "bdb".
--with-doc-strings включить строки документации (по умолчанию да)
--with-pymalloc включить специализированные malloc (по умолчанию да)
--with-c-locale-coercion включить приведение языкового стандарта C к языковому стандарту на основе UTF-8 (по умолчанию да)
--with-valgrind включить поддержку Valgrind (по умолчанию нет)
--with-dtrace включить поддержку DTrace (по умолчанию нет)
--with-libm=STRING переопределить математическую библиотеку libm на СТРОКУ (по умолчанию зависит от системы)
--with-libc=STRING переопределить библиотеку libc C на СТРОКУ (по умолчанию зависит от системы)
--with-platlibdir=DIRNAME Имя каталога библиотеки Python (по умолчанию "lib")
--with-wheel-pkg-dir=PATH Каталог пакетов wheel, используемых ensurepip (по умолчанию: нет)
--with(out)-readline[=editline] используйте Editline для серверной части или отключите модуль readline
--with-computed-gotos включить вычисляемые goto в цикле оценки (включено по умолчанию в поддерживаемых компиляторах)
--with-ensurepip[=install|upgrade|no] "установить" или "обновить" с помощью прилагаемого pip (по умолчанию - обновление)
--with-openssl=DIR root каталог OpenSSL
--with-openssl-rpath=[DIR|auto|no] Установите каталог библиотеки времени выполнения (путь) для OpenSSL библиотеки, нет (по умолчанию): не устанавливайте rpath, автоматически:
автоматическое определение rpath из --with-openssl и pkg-config, DIR: задайте явный путь
--with-ssl-default-suites=[python|openssl|STRING] переопределить строку наборов шифров по умолчанию, python: используйте предпочтительный выбор Python (по умолчанию), openssl:
оставьте значения по умолчанию OpenSSL нетронутыми, СТРОКА: используйте пользовательская строка, python и СТРОКА также устанавливают TLS 1.2 как
минимальная версия TLS
--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2 builtin hash modules, md5, sha1, sha256, sha512, sha3 (with shake), blake2
--with-experimental-isolated-subinterpreters лучше изолировать субинтерпретаторы, режим экспериментальной сборки (по умолчанию нет)
--without-static-libpython не создавайте основную библиотеку python.MINOR.a и не устанавливайте python.o (по умолчанию да)

Некоторые влиятельные переменные среды:
MACHDEP имя для файлов библиотеки, зависящих от компьютера
CC C команда компилятора
CFLAGS C флаги компилятора
LDFLAGS linker flags, например -L<lib dir> если у вас есть библиотеки в нестандартном каталоге <lib dir>
LIBS библиотеки для передачи компоновщику, например -l<library>
CPPFLAGS (Objective) C/C++ флаги препроцессора, например -I<include dir>если у вас есть заголовки в нестандартном каталоге<include dir>
CPP C препроцессор
PROFILE_TASK Аргументы Python для задачи генерации PGO
PKG_CONFIG путь к утилите pkg-config
PKG_CONFIG_PATH каталоги для добавления в путь поиска pkg-config
PKG_CONFIG_LIBDIR путь, переопределяющий встроенный путь поиска pkg-config

Используйте эти переменные, чтобы переопределить выбор, сделанный 'configure', или помочь
ему найти библиотеки и программы с нестандартными именами/местоположениями.

Сообщать об ошибках в <https://bugs.python.org/>.
Модули можно попроьбовать установить сразу в общей установке
Показать
Необходимые биты для сборки этих дополнительных модулей не были найдены: _лзма _уид
Чтобы найти необходимые биты, загляните в setup.py в detector_modules() для имени модуля.
Следующие модули, найденные с помощью функции detect_modules() в setup.py, вместо этого были
созданы файлом Makefile, как настроено в файлах установки:
_abc в момент завершения pwd
время
Сконфигурируем:

Код: Выделить всё

./configure --prefix=/usr/lib/python3.9/ --enable-optimizations --with-lto
#--enable-shared --with-wheel-pkg-dir=PATH --with-openssl=/usr/bin/openssl
компиляция, займет продолжительное время:

Код: Выделить всё

make -j4
Команда altinstall установит Python рядом с предыдущими версиями, т.е вы сможете выбирать какой версией пользоваться.
make altinstall
Команда install установит новую версию Python поверх старых.
make install

Запускаем установку:

Код: Выделить всё

make altinstall
Символическая ссылка в /usr/bin:
ln -s [целевой_файл] [имя_символической_ссылки]

Код: Выделить всё

ln -sf /usr/lib/python3.9/bin/python3.9 /usr/bin/python3.9
ln -sf /usr/lib/python3.9/bin/python3.9-config /usr/bin/python3.9-config
ln -sf /usr/lib/python3.9/bin/pip3.9 /usr/bin/pip3.9
Копируем сам файл
#cp -i /usr/lib/python3.9/bin/python3.9 /usr/bin/
#cp -i /usr/lib/python3.9/bin/python3.9-config /usr/bin/
#cp -i /usr/lib/python3.9/bin/pip3.9 /usr/bin/

Удалить при не обходимости
rm /usr/bin/python3.9
rm /usr/bin/python3.9-config
rm /usr/bin/pip3.9
Другие варианты прописать в PATH
Показать
После удачной установки, для удобного вызова Python, добавим aliases для текущей сессии терминала:
# Для интерпретатора
alias python3.9="/usr/lib/python3.9/bin/python3.9"
# Для системы управления пакетами pip
alias pip3.9="/usr/lib/python3.9/bin/pip3.9"
# Теперь, чтобы вызвать установленный Python, вводим команду
python3.9
# Чтобы вызвать pip установленного Python
pip3.9

После закрытия терминала созданные нами aliases удалятся.
Что бы создать постоянные aliases, добавим их в файл Вашего профиля текущего пользователя .basrc
просмотрт nano ~/.bashrc
# Пока так НЕ делайте.
echo 'alias python3.9="/usr/lib/python3.9/bin/python3.9"' >> ~/.bashrc
echo 'alias pip3.9="/usr/lib/python3.9/bin/pip3.9"' >> ~/.bashrc
export PATH=$PATH:/usr/lib/python3.9/bin

Ситемный для всех пользователей
echo 'alias python3.9="/usr/lib/python3.9/bin/python3.9"' >> /etc/skel/.bashrc
echo 'alias pip3.9="/usr/lib/python3.9/bin/pip3.9"' >> /etc/skel/.bashrc
Проверка:
python3.9 -V
Ответ: Python 3.9.9

# Теперь сторонние пакеты будем ставить так
pip3.9 install имя пакетов


Установка pip для версии 2.7
apt install python2
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
python2 --version
python2 -m pip --version
pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
количество слов: 1065

Вернуться в «Linux»