Общие инструменты Python: использование virtualenv, установка пакетов с помощью pip и управление пакетами

Published by Leave your thoughts

Вступление

В Python (и особенно это касается области разработки приложений) есть определенные инструменты, которые часто упоминаются при работе с этим языком программирования или с исходным кодом. Несмотря на чрезвычайную популярность и широкое применение Python, найти хорошее пошаговое руководство, охватывающее все его важные инструменты, достаточно трудно.

Данная статья охватывает не только основы, но и разъясняет логику работы таких инструментов, углубляясь в их использование в реальных сценариях. В статье описаны скачивание и установка общих библиотек и настроек, работа с виртуальной средой (с помощью virtualenv), а также управление пакетами для разработки и производства собственных приложений.

Руководство подходит как новичкам, так и опытным пользователям, которые хотят расширить свои знания в данной области. При возникновении каких-либо вопросов, пожалуйста, оставьте комментарий под данной статьей.

Python на CentOS

Пожалуйста, помните, что при работе с системой CentOS/RHEL необходимо отказаться от использования интерпретатора Python по умолчанию. Вместо этого нужно установить Python самостоятельно.

Чтобы получить инструкции по установке Python на CentOS, читайте руководство «Как установить Python 2.7.6 и 3.3.3 на CentOS 6.4», прежде чем продолжить.

Также в этой статье можно найти советы по установке инструментов pip и virtualenv на CentOS с пользовательской инсталляцией Python.

Пакеты Python

Хотя приложения Python могут состоять из одного файла, как правило, они состоят из ряда функций, объектов (классов), полезных инструментов и, конечно, переменных, распределенных по нескольким файлам, которые размещены внутри модулей. Все эти модули составляют то, что называется пакетом.

Традиционный способ установки пакета предполагает в первую очередь его нахождение, а затем загрузку. Кажется, это достаточно просто сделать (как и многое в Python), но тут есть свои изъяны.

Когда файлы готовы и распакованы, при использовании модуля disutils их можно установить, вызвав setup.py.

Пример установки пакета:

# Синтаксис: cd [имя пакета]
cd a_package
python setup.py install

Модуль disutils (distribution utilities – утилиты дистрибуции) – это набор инструментов, которые используются для пакетирования и дистрибуции кода. Он поставляется вместе с Python по умолчанию (то есть, включен в стандартную библиотеку).

Несмотря на простоту описанной выше процедуры, это не сработает, если в процессе существует задача, не связанная с инсталляцией. Тут на помощь приходит управление пакетами, имеющее несколько преимуществ, а именно:

  • Удаление (например, pip удаляет пакет_x);
  • Контроль версий (например, pip устанавливает django==x);
  • Автоматическое управление зависимостями (так как пакеты могут зависеть от других).

Управление пакетами

Пакетами Python могут быть инструменты, библиотеки, фреймворки и приложения.

Благодаря популярности этого языка существуют десятки тысяч доступных пакетов, которые можно использовать для создания собственных проектов.

Инструменты управления пакетами

Наиболее часто используемые менеджеры пакетов Python — pip и easy_install. Данные инструменты помогают выполнить следующие задачи:

  • Скачивание, установка, удаление;
  • Сборка;
  • Управление пакетами Python и многое другое.

Оба они, кажется, выполняют одинаковые действия, и их совместная зависимость от общей библиотеки setuptools лишний раз указывает на это.

На самом же деле, многочисленные различия их работы просто не сразу заметны.

pip vs easy_install

Первым инструментом для подобных задач был easy_install. Сначала этот инструмент показался гораздо более удобным и простым по сравнению с выполнением задач вручную, но со временем были выявлены некоторые его дефекты. Это стало поводом для создания нового менеджера пакетов, pip.

Pip (как определено в самом проекте) является заменой easy_install, более удобной по сравнению с предшественником, выполняющей следующие задачи, в том числе, но не ограничиваясь:

  • Загрузка всех необходимых пакетов перед их установкой;
  • Обеспечение обратной связи;
  • Ведение истории предпринимаемых действий;
  • Вывод сообщений об ошибках (по традиции Python);
  • Дополнение действий virtualenv.

Чтобы узнать об утилите pip больше, обратитесь к ее странице в каталоге пакетов PyPI.

Подробное руководство по pip

Данный раздел посвящен необходимым зависимостям pip, установке последней версии инструмента, а также рассмотрению его основных функций, а именно установки, удаления, замораживания и управления требованиями.

Когда использовать pip?

Итак, как и говорилось во вступлении, данное руководство предоставит примеры использования инструментов в реальных сценариях.

Предположим, вы разрабатываете небольшое приложение, и благодаря использованию перспективного плана все идет хорошо. Затем вы обнаруживаете библиотеку (или модуль), который очень полезно включить в разрабатываемое приложение. Его можно загрузить традиционным способом, как было описано выше. Но если таких пакетов несколько, то этот процесс становится весьма сложным. Многие проблемы, связанные с управлением данными пакетами (например, обновление, удаление, замена, использование другой версии) менеджер пакетов pip может с легкостью устранить.

Установка pip

Прежде чем устанавливать pip, нужно установить его зависимости, что сделать достаточно просто.

setuptools

Как уже было сказано, одной из зависимостей pip является библиотека setuptools. Она основана на стандартных функциях набора утилит дистрибутива Python под названием distutils. Учитывая, что distutils предоставляется по умолчанию, все что нужно сделать — установить setuptools.

Команда curl позволяет безопасно скачать настроечные файлы setuptools. cURL – это системная библиотека, осуществляющая передачу данных по различным протоколам (т.е. это общий язык для обмена данными между приложениями, такими как HTTP). Она проверяет сертификаты SSL из исходного кода и передает данные интерпретатору Python.

Эти настроечные файлы, которые интерпретатор Python будет выполнять, автоматизируют процесс установки.

Выполните следующую команду:

curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -

Данная установка дает возможность использовать pip общесистемно. Но устанавливать таким образом любой другой пакет не рекомендуется. Желательно всегда использовать virtualenv, автономную среду Python, речь о которой пойдет в следующем разделе.

Примечание: возможно, для продолжения загрузки понадобятся привилегии суперпользователя. В таком случае используйте:

sudo curl https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py | python -

Установив эту единственную зависимость, можно продолжить загрузку и установку pip.

Опять же, для безопасной загрузки и установки настроечных файлов используйте curl.

Выполните следующую команду:

curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python -

Папка установки pip по умолчанию находится в

/usr/local/bin

Чтобы не указывать полный путь, нужно добавить эту строку в PATH.

Редактирование PATH:

export PATH="/usr/local/bin:$PATH"

После выполнения этого действия можно начать работу с pip.

Использование pip

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

Установка пакетов с pip

Pip может имеет огромное множество функций, но чаще всего он используется для установки пакетов. Существует несколько способов установки пакетов с pip.

Поиск и установка пакетов:

# Синтаксис: pip install [имя пакета]
# Например, чтобы установить библиотеку *requests*:
pip install requests

Поиск и установка определенной версии:

# Синтаксис: pip install [имя пакета]==[версия]
# Чтобы установить версию 2.0.0. библиотеки requests
pip install requests==2.0.0

Установка из URL или репозитория VCS:

# Синтаксис: pip install [url]
# Для установки virtualenv
pip install https://github.com/pypa/virtualenv/tarball/1.9.X

Установка внутри virtualenv:

# Синтаксис: pip install [имя среды] [имя пакета]
# Это установит или создаст пакет внутри среды
# К примеру, чтобы установить requests внутри virtualenv под названием *venv*
pip install -E venv requests

Удаление файлов с pip

Вторая часто используемая функция pip – это удаление пакетов.

Чтобы удалить пакет:

# Синтаксис: pip uninstall [имя пакета]
# Удалить библиотеку requests
pip uninstall requests

Обновление пакетов с pip

Вместо того, чтобы удалять пакет, чтоб потом установить более новую версию, можно использовать функцию обновления пакетов.

Чтобы обновить пакет:

# Синтаксис: pip install --upgrade [имя пакета]
# Обновить библиотеку requests
pip install --upgrade requests

Поиск пакетов с pip

Часто нужно найти требуемый пакет.

Чтобы найти пакет:

# Синтаксис: pip search [имя пакета]
# Чтобы найти все пакеты django:
# Это может занять много времени (их очень много)
pip search django

Создание списка установленных пакетов с pip

Одна из действительно исключительных и полезных функций pip – это возможность быстро создать списки установленных пакетов. Часто такие пакеты называются требованиями. В зависимости от версии среды Python (имеется в виду виртуальная или глобальная среды) pip создаст файл, перечисляющий все установленные пакеты.

Создание нового списка («freeze»)

Примечание: данная команда создаст файл в текущем рабочем каталоге.

# Синтаксис: pip freeze > [имя файла.расширение]
# Создать список всех текущих установленных пакетов
pip freeze > package_list.txt

Добавление новых файлов в уже существующий список-шаблон

Примечание: данная команда создаст файл в текущем рабочем каталоге.

# Синтаксис: pip freeze -r [существующий файл.расширение] > [имя файла.расширение]
# Добавить новые пакеты, установленные после создания последнего списка
pip freeze package_list.txt > package_list_new.txt

Установка пакетов из списка с помощью pip

При работе с приложением (предпочтительно в виртуальной среде) все зависимости (необходимые пакеты) должны быть в наличии. Создав список этих пакетов при помощи команды freeze, позже их можно установить при помощи команды install.

Чтобы установить все пакеты из списка:

# Синтаксис: pip install -r [имя файла.расширение]
# Чтобы установить все пакеты из предыдущего примера:
pip install -r package_list_new.txt

Подробное руководство по virtualenv

Для начала нужно понять, что такое virtualenv и когда ее использовать.

Virtualenv:

В Python средой (environment) называют папку (каталог), которая содержит все необходимые проекту (приложению Python) пакеты для его организованного, изолированного запуска. Запущенная среда автоматически поставляется с собственным интерпретатором Python (копией того, что был использован для ее создания), а также с собственным инструментом pip.

Virtualenv решает ряд проблем:

  • Создание новой изолированной среды для проекта Python;
  • Возможность загрузки пакетов без привилегий  admin/sudo;
  • Простая и быстрая упаковка приложения;
  • Создание списка зависимостей одного проекта (с помощью pip);
  • Быстрое восстановление зависимостей с помощью файла требований (с помощью pip);
  • Портативность между системами.

Настоятельно рекомендуется использовать virtualenv при работе с проектами Python (независимо от их количества). Работая совместно с pip, этот многофункциональный и очень простой в использовании инструмент способен творить чудеса.

Итак, установите virtualenv.

Установка virtualenv

Чтобы установить virtualenv, нужно вызвать pip. Данный пакет будет установлен как глобально доступный пакет для запуска с помощью интерпретатора Python.

Существует 2 способа получить это приложение, и его версия будет зависеть от выбранного способа.

Самый простой способ – это использовать pip для поиска, загрузки и установки. Минус в том, что pip не обязательно установит самую последнюю версию.

Загрузка virtualenv с помощью pip:

# Синтаксис: [sudo] pip install virtualenv
sudo pip install virtualenv

Загрузка последней доступной версии virtualenv с помощью curl:

Последняя доступная версия virtualenv — это 1.11.X.

# Синтаксис: [sudo] pip install [github репозиторий]/[версия]
sudo pip install https://github.com/pypa/virtualenv/tarball/1.1.X

Использование virtualenv

Данный инструмент создает папку , содержащую интерпретатор Python и копию pip. Затем нужно либо указать местонахождение данного интерпретатора, либо активировать его.

Все приложения, установленные при помощи интерпретатора внутри виртуальной среды, будут размещены в этом месте

При создании списка пакетов с помощью pip в файл будут внесены только пакеты, находящиеся в этой папке.

Запомните: закончив работу с одной средой (или же при работе с глобальной средой), обязательно отключайте (deactivate) ее,  прежде чем перейти в другую среду.

Создание/инициализация виртуальной среды (virtual environment = virtualenv)

Создание среды с помощью предоставленного интерпретатора

# Синтаксис: virtualenv [имя папки(среды)]
# Чтобы создать среду по имени *my_app*
virtualenv my_app

Создание среды с помощью пользовательского интерпретатора Python

# Синтаксис: virtualenv --python=[место/python/] [имя среды]
virtualenv --python=/opt/python-3.3/bin/python my_app

Активация виртуальной среды:

# Синтаксис: source [имя среды]/bin/activate
# Чтобы активировать созданную среду Python
source my_app/bin/activate

Работа с виртуальной средой без активации

По некоторым причинам может понадобиться вести  работу в неактивированной среде. Это делает команды более гибкими; с другой стороны, каждый раз нужно проверять, правильный ли интерпретатор используется.

# Синтаксис: [имя среды]/bin/python [аргументы]
my_app/bin/python python_script.py

Чтобы использовать инсталляцию pip внутри среды без активации:

# Синтаксис: [имя среды]/bin/pip [команда] [аргументы]
# Установить библиотеку requests, не активируя среду
my_app/bin/pip install requests

Чтобы отключить среду:

# Синтаксис: deactivate
# Чтобы отключить среду:
deactivate

Tags: , , ,

Добавить комментарий

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


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>