По умолчанию – 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.6
Ниже будет показано – как именно это проявляется.
Установка выполняется на:
# cat /etc/redhat-release CentOS release 6.6 (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 <root> | 2015-05-06 17:03 | I, U | 28 < 6 | root <root> | 2015-04-05 17:32 | Install | 2 >E 5 | root <root> | 2015-04-05 17:31 | Install | 1 < 4 | root <root> | 2015-04-05 17:22 | Install | 6 > 3 | root <root> | 2015-04-05 17:21 | Install | 1 2 | root <root> | 2015-04-05 17:02 | I, U | 138 1 | System <unset> | 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
# python get-pip.py ... Successfully installed pip-6.1.1
Переходим к Django 1.8.
Установка Django 1.8
В репозиториях CentOS имеется Django 1.3:
... python-django noarch 1.3.1-1.el6.rf ...
Поэтому – скачаем исходники, и установим вручную.
На странице проекта Django находим ссылку и качаем архив:
# wget https://www.djangoproject.com/m/releases/1.8/Django-1.8.1.tar.gz
Распаковываем, меняем директорию:
# tar xfp Django-1.8.1.tar.gz # cd Django-1.8.1
И дальше- как обычно:
# python setup.py install
Проверяем:
# python -c "import django; print(django.get_version())" 1.8.1
Готово.