Select Page

CentOS 6.7: обновление Python до 2.7

CentOS 6.7: обновление Python до 2.7По умолчанию – CentOS 6 использует Python 2.6, и Django 1.3.
Задача – ввести Python 2.7, Setuptools, PIP и Django 1.8.
Ещё одно замечание, прежде чем вы начнёте – с вероятностью в 99% – проекты на Django 1.3 не “взлетят” на Django 1.8.

Основная проблема при обновлении (какая почему-то почти нигде не указывается) – это то, что YUM зависит от от версии Python:

repoquery --requires yum
...
python(abi) = 2.7

Ниже будет показано – как собственно это проявляется.
Установка выполняется на:

cat /etc/redhat-release
CentOS release 6.7 (Final)

Обновляем все введённые пакеты:

yum update

Кроме того – для установки Setuptools потребуется модуль zlib-devel:

yum install zlib-devel

Так как без него – будет промах при вызове zlib():

...
File "/usr/local/lib/python2.7/zipfile.py", line 526, in __init__
self._decompressor = zlib.decompressobj(-15)
AttributeError: 'NoneType' object has no attribute 'decompressobj'

А для установки PIP – модуль openssl-devel:

yum install openssl-devel

Без какого будет возникать такая ошибка:

...
File "/tmp/tmpSUScFN/pip.zip/pip/_vendor/__init__.py", line 92, in load_module
ImportError: No module named 'pip._vendor.requests'

Установка Python 2.7

Значительно: проверьте $PATH:

echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/setevoy/scripts/:/home/setevoy/scripts/money/:/home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3/bin:/root/bin:/home/setevoy/scripts/:/home/setevoy/scripts/money/:/home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3/bin

Значительно, что бы /usr/local/bin был до /usr/bin – т.к. Python 2.6 установлен в /usr/bin, а Python 2.7 – будет устанавливаться в /usr/local/bin (дальней – покажу как это определяется).

Проверяем наличие компилятора:

gcc -v
...
gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)

Если его нет – устанавливаем:

yum install gcc

С сайта Python загружаем заключительную доступную версию:

cd /tmp/
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz

Распаковываем, меняем директорию:

tar xfp Python-2.7.9.tgz
cd Python-2.7.9

Испытываем зависимости и создаём Makefile:

./configure

Теперь, возвращаясь к вопросу о $PATH: если посмотреть созданный Makefile – то видать, что prefix по умолчанию указан /usr/local:

cat Makefile | grep prefix
...
prefix= /usr/local
...

Что и требуется. Изменить его можно опцией —prefix:

./configure -h | grep prefix
--prefix=PREFIX install architecture-independent files in PREFIX

Собираем пакет:

make
make install

Испытываем:

python --version
Python 2.7.9

Проверяем – какой именно Python используется:

which python
/usr/local/bin/python

Тогда как престарелый – остался в системе:

/usr/bin/python --version
Python 2.6.6

YUM работает:

yum history
Loaded plugins: fastestmirror, security
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
7 | root | 2015-05-06 17:03 | I, U | 28 <
6 | root | 2015-04-05 17:32 | Install | 2 >E
5 | root | 2015-04-05 17:31 | Install | 1 <
4 | root | 2015-04-05 17:22 | Install | 6 >
3 | root | 2015-04-05 17:21 | Install | 1
2 | root | 2015-04-05 17:02 | I, U | 138
1 | System | 2015-04-05 16:36 | Install | 629
history list

И подлинно – с Python 2.7 YUM работать не может:

/usr/local/bin/python /usr/bin/yum -h
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It’s possible that the above module doesn’t match the
current version of Python, which is:
2.7.9 (default, May 6 2015, 17:31:40)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)]

Тогда как с Python 2.6 – всё трудится по-прежнему:

/usr/bin/python /usr/bin/yum -h | head -n 4
Loaded plugins: fastestmirror, security
Usage: yum [options] COMMAND

List of Commands:

Не ведаю – как именно YUM определяет путь к Python – но факт, он продолжает использовать /usr/bin.

Если каких-то модулей не хватает (как openssl-devel в начине статьи) – достаточно просто пересобрать и установить Python поверх:

make clean
./configure
make
make install

С этим разобрались – переходим к Setuptools и PIP.
Установка Setuptools

wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python ez_setup.py
...
Installed /usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg
Processing dependencies for setuptools==15.2
Finished processing dependencies for setuptools==15.2

Установка PIP

wget https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py
view source
python get-pip.py
...
Successfully installed pip-6.1.1

About The Author

Leave a reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Может быть интересно:

Свежие комментарии