Говорят, бесконечно можно смотреть на три вещи: как горит огонь, как течет вода и как работают другие люди…
Возможно в список стоит добавить четвертый пункт: как обновляются пакеты в официальном репозитории Debian 10 или CentOS 7. Например, когда тебе нужна одинаковая версия Python на всех операционных системах, а в официальном репозитории доступен только релиз, которому уже больше года.
На самом деле, проблемы нет, последний релиз для Windows и MacOS можно найти на официальной странице загрузки.
Либо скачать необходимую версию с официального ftp-сервера:
version=3.9.5 wget https://www.python.org/ftp/python/$version/python-$version-amd64.exe wget https://www.python.org/ftp/python/$version/python-$version-macos11.pkg
В случае с Linux необходимую версию можно собрать из исходных кодов самостоятельно или воспользоваться готовым сценарием сборки:
sudo su - -c "bash <(curl -s https://git.hmp.today/pavel.muhortov/utils/raw/branch/master/build-python.sh) qn 3.9.5 install-python.log"
Сборка Python из исходных кодов
- Установка пакетов, необходимых для сборки
# debian sudo apt update && sudo apt upgrade -y sudo apt-get install -y build-essential tk-dev libncurses5-dev \ libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev \ libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev
# centos sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel
- Скачивание и распаковка необходимой версии исходных кодов
subvers=3.9.5 version=$(echo $subvers | cut -d. -f1,2) wget https://www.python.org/ftp/python/$subvers/Python-$subvers.tgz tar zxf Python-$subvers.tgz
- Сборка 4мя ядрами процессора и установка собранного пакета
cd Python-$subvers ./configure --enable-optimizations --prefix=/usr/local/opt/python-$subvers make -j4 sudo make altinstall
- Очистка после установки
cd .. sudo rm -r Python-$subvers*
# debian sudo apt autoremove -y
# centos sudo yum autoremove -y
Если изменить основную символическую ссылку, что-нибудь может сломаться:
sudo rm /usr/bin/python3 && sudo ln /usr/local/opt/python-$version/bin/python$version /usr/bin/python3
Как минимум придется ремонтировать lsb_release:
sudo sed -i "s/\/usr\/bin\/python3 -Es/\/usr\/bin\/python3.7 -Es/" /usr/bin/lsb_release
- Поэтому лучше определить обновленную версию Python только для текущего пользователя
sudo ln /usr/local/opt/python-$version/bin/python$version /usr/bin/python$version echo "alias python3=python$version" >> ~/.bashrc echo "alias pip3=pip$version" >> ~/.bashrc source ~/.bashrc
- Можно создавать виртуальное окружение, устанавливать дополнительные пакеты и пользоваться
/usr/bin/python3.9 -m venv .venv cd .venv source ./bin/activate pip install django pip install djangorestframework deactivate
- Для деинсталляции пакета достаточно удалить каталог установки
sudo rm -rf /usr/local/opt/python-$version