Управление программными пакетами: установка, обновление, удаление#
Программные пакеты в SberLinux OS Server поставляются в виде rpm-пакетов или модулей (коллекций rpm-пакетов) через репозитории BaseOS и AppStream.
Репозиторий BaseOS#
BaseOS – это репозиторий, который содержит базовый набор программных пакетов, обеспечивающий основную функциональность операционной системы. Его содержимое доступно в виде rpm-пакетов.
Репозиторий AppStream#
Репозиторий AppStream содержит дополнительные приложения пользовательского пространства, языки различных сред выполнения, базы данных для поддержки различных рабочих нагрузок и пользовательских сценариев.
Примечание
AppStream – это интерфейс, обеспечивающий стандартизацию спецификации машиночитаемых метаданных программного обеспечения, а также инструменты их проверки и диагностики. Представляет собой каталог, содержащий метаинформацию о каждой версии модуля или программного пакета в XML или YAML формате.
Пакеты AppStream доступны в одном из двух форматов: rpm и модули (расширение формата rpm).
Модуль представляет собой набор программных пакетов, составляющих логическую единицу (например, приложение, его зависимости (библиотеки), набор дополнительных инструментов и документацию). Эти пакеты создаются, тестируются и выпускаются вместе.
Версии пакетов и модулей в AppStream поставляются и обновляются чаще, чем пакеты BaseOS. У каждой версии свой жизненный цикл. Это позволяет более гибко настраивать пользовательское пространство операционной системы без ущерба стабильности работы базовой функциональности.
Модуль в AppStream может содержать несколько версий программных пакетов. Например, в модуле postgresql доступны все верси СУБД PostgreSQL: PostgreSQL 10 (по умолчанию) и PostgreSQL 9.6. В операционной системе может быть установлена только одна версия, но различные версии можно использовать в отдельных контейнерах.
Инструменты управления программным обеспечением#
Для управления программным обеспечением используются утилиты yum и dnf (менеджеры пакетов) (подробнее в разделе «База знаний» → «Утилита dnf» и «База знаний» → «Утилита yum»). Менеджеры пакетов позволяют осуществлять управление программными пакетами и модулями, а также выполнять с ними полный набор операций, например, таких как установка, обновление, удаление, обработка зависимостей и т.д.
Важно
Приоритетная утилита для управления программным обеспечением - dnf. Также можно использовать yum.
Совместимые пакеты yum - часть dnf и могут устанавливаться под теми же именами (которые являются символическими ссылками в рамках обеспечения совместимости), поэтому двоичные файлы, файлы конфигурации и каталоги расположены по умолчанию.
Настройка YUM и DNF#
Информация о конфигурации для менеджеров пакетов yum и dnf, а также связанных с ними утилит хранится в файлах /etc/yum.conf и /etc/dnf/dnf.conf в разделе [main] (единственный раздел в файлах). Пары ключ-значение в этом разделе влияют на работу пакетных менеджеров с репозиториями. [main] содержит только те настройки, которые были явно заданы в данном разделе.
Для просмотра полной конфигурации (в том числе отображения настроек по умолчанию) используйте команду:
Для
yum:yum config-manager --dumpДля
dnf:dnf config-manager --dump
Важно
Большинство команд в разделе применимы как для dnf, так и для yum.
Для изменения текущей конфигурации:
Откройте файл
/etc/yum.confили/etc/dnf/dnf.confв текстовом редакторе.Отредактируйте раздел
[main]в соответствии с требуемыми изменениями.Сохраните файл.
Менеджеры пакетов позволяют использовать плагины для расширения функциональности и улучшения работы. Каждый устанавливаемый плагин может иметь свой собственный файл конфигурации в каталоге /etc/dnf/plugins/. Название файла конфигурации должно соответствовать шаблону <plug-in_name>.conf, где <plug-in_name> - название подключаемого плагина. Чтобы отключить плагин, необходимо в таком файле в режиме редактирования добавить:
[main]
enabled=False
Плагины в пакетных менеджерах загружаются по умолчанию, но есть возможность изменить стандартные настройки.
Для включения всех подключаемых плагинов:
Откройте файл
/etc/yum.confили/etc/dnf/dnf.confв текстовом редакторе.Добавьте параметр
plugins=1(значение по умолчанию) в раздел[main].Сохраните файл.
Для отключения всех подключаемых плагинов необходимо параметру plugins установить значение 0.
Внимание
Отключать все плагины не рекомендуется. Некоторые плагины предоставляют важные сервисы менеджеров пакетов. В частности, плагины product-id и subscription-manager обеспечивают поддержку на основе сертификатов Content Delivery Network (CDN).Глобальное отключение плагинов предусмотрено в качестве опции для удобства и рекомендуется только при диагностике потенциальной проблемы с пакетными менеджерами.
Для отключения конкретного плагина:
Откройте файл
/etc/dnf/plugins/<plug-in_name>.confв текстовом редакторе.Добавьте параметр
enabled=Falseв раздел[main].Сохраните файл.
Для отключения всех плагинов для конкретной команды добавьте опцию --noplugins при вводе. Например, чтобы отключить все плагины для команды update, введите:
dnf --noplugins update
Для отключения определенных плагинов для конкретной команды добавьте при вводе опцию --disableplugin=<plugin-name>, где <plugin-name> – название плагина. Например, чтобы отключить плагин <plugin-name> для команды update, введите:
dnf update --disableplugin=<plugin_name>
Для включения определенных плагинов для конкретной команды добавьте при вводе опцию --enableplugin=<plugin-name>. Например, чтобы включить плагин <plugin-name> для команды update, введите:
dnf update --enableplugin=<plugin_name>
Поиск и отображение информации с использованием с YUM и DNF#
Менеджеры пакетов в SberLinux OS Server позволяют осуществлять поиск информации о программных пакетах и модулях, установленных в системе, а также в репозиториях AppStream и BaseOS.
Поиск программных пакетов#
С помощью менеджеров пакетов можно определить, какой пакет в репозитории содержит необходимое программное обеспечение.
Для поиска пакетов в названии или в их кратком описании в репозитории введите:
dnf search <term>
Где <term> - название пакета или термин, который к нему относится.
Команда dnf search возвращает совпадения терминов в зоне поиска, указанной выше. Это ускоряет поиск и позволяет искать пакеты, название которых неизвестно, но известен связанный по смыслу термин.
Чтобы добавить в зону поиска полное описание пакетов, введите:
dnf search --all <term>
Опция --all обеспечивает более исчерпывающий, но более медленный поиск.
Важно
Следующие команды применимы только для dnf.
Чтобы выполнить поиск по названию пакета в перечне пакетов в репозитории, введите:
dnf repoquery <package_name>
Где <package_name> – название пакета.
Вывод команды также будет содержать версию этого пакета.
Для поиска пакета по файлу, который ему принадлежит, введите:
dnf provides <file_name>
Где <file_name> – имя файла или путь к этому файлу.
Отображение перечня программных пакетов#
yum и dnf можно использовать для отображения перечня пакетов и их версий, доступных в репозитории. При необходимости список пакетов можно отфильтровать, оставив, например, только те пакеты, для которых доступны обновления.
Для вывода всех доступных пакетов, включая их архитектуру, версии, введите:
dnf list --all
Знак @ перед указанием репозитория говорит, что пакет в данный момент установлен в системе.
Для того чтобы отфильтровать список пакетов, вместо --all используйте:
--installed- для формирования списка установленных пакетов в системе;--available- для формирования списка пакетов, доступных для установки в репозиториях;--upgrades- для формирования списка пакетов, для которых доступны новые версии для установки.
Результаты работы команды можно дополнительно отфильтровать с использованием глобальных выражений в качестве аргументов. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Важно
Для dnf команда dnf repoquery является альтернативой команде dnf list --all.
Вывод информации о репозитории#
С помощью менеджеров пакетов можно узнать, какие репозитории подключены или отключены в системе.
Чтобы вывести список подключенных репозиториев, введите команду:
dnf repolist
Также вместе с этой командой можно использовать следующие опции:
--disabled- выведет список отключенных репозиториев;--all- выведет список всех репозиториев.
Для получения дополнительной информации о репозитории введите:
dnf repoinfo <repository_name>
Где <repository_name> – название репозитория.
Результаты также можно дополнительно отфильтровать с использованием глобальных выражений. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Вывод информации о пакетах#
С помощью менеджеров пакетов можно получать дополнительные сведения о пакетах, такие как версия, тип архитектуры, размер и описание.
Для вывода информации об одном или нескольких пакетах, установленных в системе, а также о его более новых версиях (при наличии в репозитории), введите:
dnf info <package_name>
Где <package_name> название пакета.
Важно
Для dnf в качестве альтернативы можно использовать команду dnf repoquery --info <package_name>, которая выведет информацию обо всех пакетах в репозитории с указанным <package_name>.
Дополнительно отфильтровать результаты можно с использованием глобальных выражений (см. подраздел «Использование глобальных выражений для дополнительной фильтрации».)
Вывод информации о группах пакетов#
Менеджеры пакетов позволяют получать информацию о группах пакетов в репозитории и системе. При установке группы пакетов набор зависимых пакетов устанавливается за одно действие, но важно знать название нужной группы.
Примечание
Группа пакетов - это набор пакетов, которые объединены в рамках выполнения общей функции (например, системные инструменты, звук и видео).
Для вывода списка установленных и доступных групп используйте:
dnf group list
Отфильтровать результаты команды dnf group list возможно с помощью параметров --installed и --available. Параметр --hidden при вводе команды позволит отобразить скрытые группы.
Для просмотра количества установленных и доступных групп введите:
dnf group summary
Для вывода информации о перечне пакетов, содержащихся в определенной группе (как обязательных, так и необязательных) введите:
dnf group info "<group_name>"
Где <group_name> – название нужной группы.
Дополнительно результаты можно отфильтровать с использованием глобальных выражений. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Отображение информации о модулях и их содержимом#
С помощью менеджеров пакетов можно получить всю информацию о модулях и составе их пакетов, определить доступные модули и их версии в репозитории для того, чтобы, например, выбрать необходимую версию (поток) перед установкой.
Чтобы вывести информацию о списке всех доступных модулей, введите:
dnf module list
Для просмотра аналогичной информации для определенного модуля введите:
dnf module list <module_name>
Где: <module_name> - название нужного модуля.
Чтобы определить в каком модуле содержится определенный пакет, введите:
dnf module provides <package_name>
Где: <package_name> - название нужного пакета.
Для вывода информации о модуле, включая его описание, перечень профилей и список всех входящих в него пакетов, введите:
dnf module info <module_name>
Где: <module_name> - название нужного модуля.
Примечание
Профиль модуля - это список рекомендуемых пакетов, которые устанавливаются вместе для конкретного варианта использования, например, таких как разработка, минимальный или расширенный (надежный) вариант развертывания.
Для вывода перечня пакетов, соответствующих каждому профилю, введите:
dnf module info --profile <module_name>
Где: <module_name> - название нужного модуля.
Использование глобальных выражений для дополнительной фильтрации#
Команды dnf позволяют фильтровать результаты, добавляя одно или несколько глобальных выражений в качестве аргументов.
Чтобы убедиться, что глобальные выражения передаются по назначению dnf, используйте один из следующих методов:
Заключите глобальное выражение (например:
/<file_name>) в двойные или одинарные кавычки.dnf provides "*/<file_name>".Замените
<file_name>необходимым именем файла.Экранируйте подстановочные знаки, поставив перед ними символ обратной косой черты (
\).dnf provides \*/<file_name>Замените
<file_name>необходимым именем файла.
Вывод информации о рекомендациях по обновлению пакетов#
С помощью команды dnf updateinfo можно получить рекомендации по обновлению пакетов с указанием информации по исправленным ошибкам или устраненным уязвимостям в конкретных версиях.
Чтобы перечислить все рекомендации с указанием типов ошибок и общим количеством имеющихся ошибок, введите команду:
dnf updateinfo summary
Для просмотра подробной информацию о каждой из имеющихся ошибок введите:
dnf updateinfo info
Для перечисления всех имеющихся ошибок, доступных для системы, используйте:
dnf updateinfo list
Для ограничения вывода определенными типами, можно использовать различные аргументы:
Чтобы перечислить исправления:
dnf updateinfo list bugfixЧтобы вывести рекомендации, ссылающиеся на CVE:
dnf updateinfo --with-cve --all list | grep CVEГде:
--with-cve- показывает рекомендации со ссылкой на CVE;--all- показывает рекомендации, касающиеся всех версий установленных пакетов.
Для вывода справочной информации по команде введите:
dnf updateinfo -h
Установка программных пакетов#
Используйте один из следующих способов для установки пакетов.
Чтобы установить пакет и все зависимости этого пакета, используйте:
dnf install <package_name>Замените
<package_name>на необходимое название пакета.При необходимости добавьте тип архитектуры пакета (например,
i686илиx86_64):dnf install <package_name>.<architecture>Где
<architecture>- тип архитектуры.Чтобы установить несколько пакетов и их зависимостей одновременно, используйте:
dnf install <package_name_1> <package_name_2>Замените
<package_name_1>и<package_name_2>на необходимые названия пакетов.Если известно имя бинарного файла, который нужно установить, но не имя пакета, используйте путь к бинарному файлу в качестве аргумента:
dnf install <path_to_file>Замените
<path_to_file>на путь к бинарному файлу.dnfпросматривает списки пакетов, находит пакет, который соответствует<path_to_file>, и запрашивает разрешение на установку.Чтобы установить ранее загруженный пакет из локального каталога, используйте:
dnf install <path_to_RPM_file>Замените
<path_to_RPM_file>на путь к пакету в локальном каталоге.
Важно
Если у пакета есть зависимости, укажите также путь к соответствующим пакетам. Иначе dnf начнет загружать зависимости из репозитория и выдаст ошибку, если они недоступны.
Установка группы пакетов по имени группы или с помощью идентификатора группы dnf#
Следующие команды позволяют установить группу пакетов по имени группы или с помощью идентификатора группы dnf.
Чтобы установить группу пакетов по имени группы, используйте:
dnf group install <group_name>Замените
<group_name>названием группы или группы необходимой среды.Чтобы установить группу пакетов по идентификатору группы, используйте:
dnf group install <group_id>Замените
<group_id>идентификатором группы.
Установка/обновление пакетов по указанным CVE#
При обнаружении неустраненных уязвимостей можно установить/обновить пакеты по указанным CVE:
dnf upgrade --cve ${CVE}
Где {CVE} - это перечень CVE.
Обновление программных пакетов#
Чтобы узнать, какие пакеты, установленные в системе, имеют доступные обновления, используйте:
dnf check-update
Выходные данные возвращают список пакетов и их зависимостей, для которых доступно обновление.
Используйте следующую команду для обновления одного пакета и его зависимостей с помощью dnf.
dnf upgrade <package_name>
Замените <package_name> на необходимое имя пакета.
Важно
При применении обновлений к ядру dnf всегда устанавливает новое ядро, независимо от того, используется ли dnf update команда или dnf install.
Используйте следующую команду для обновления группы пакетов и их зависимостей с помощью dnf.
dnf group update <group_name>
Замените <group_name> на имя группы пакетов.
Удаление программных пакетов#
Используйте следующие команды, чтобы удалить пакет либо по имени группы, либо по идентификатору группы.
Чтобы удалить определенный пакет и все зависимые пакеты, используйте:
dnf remove <package_name>Замените
<package_name>на необходимое название пакета.Чтобы удалить несколько пакетов и их зависимости одновременно, используйте:
dnf remove <package_name_1> <package_name_2>Замените
<package_name_1>и<package_name_2>на необходимые названия пакетов.
Важно
dnf не может удалить пакет, не удалив зависимые пакеты.
Используйте следующие команды, чтобы удалить пакет либо по имени группы, либо по идентификатору группы.
Чтобы удалить группу пакетов по имени группы, используйте:
dnf group remove <group_name>Замените
<group_name>необходимым названием группы.Чтобы удалить группу пакетов по идентификатору группы, используйте:
dnf group remove <group_id>Замените
<group_id>идентификатором группы.
Обработка истории управления пакетами#
Команда dnf history позволяет просматривать информацию о временной шкале транзакции dnf, даты и время их возникновения, количество затронутых пакетов, были ли эти транзакции успешными или были прерваны, и была ли изменена база данных RPM между транзакциями. Команда dnf history также может быть использована для отмены или повторного выполнения транзакций.
Просмотр транзакций#
Используйте следующие команды, чтобы перечислить последние транзакции, последние операции для выбранного пакета и сведения о конкретной транзакции.
Чтобы отобразить список всех последних транзакций
dnf, используйте:dnf historyВывод команды будет содержать следующую информацию:
Столбец
Action(s)- тип действия, совершенный во время транзакции. Например: установка (I), обновление (U), удаление (E).Столбец
Altered- количество действий, выполненных во время транзакции.
Чтобы отобразить список всех последних операций для выбранного пакета, используйте:
dnf history list <package_name>Замените
<package_name>на необходимое имя пакета.Чтобы проверить конкретную транзакцию, используйте:
dnf history info <transaction_id>Замените
<transaction_id>на необходимый идентификатор транзакции.
Важно
Отфильтруйте выходные данные команды, добавив глобальные выражения.
Отмена транзакций#
Чтобы отменить операции, выполненные во время транзакции dnf, используйте:
для отмены одной транзакции
dnf-dnf history undo;для отмены всех транзакций
dnf, выполненных между указанной и последней транзакциями, —dnf history rollback.
Для отмены конкретной или последней транзакции с помощью dnf воспользуйтесь следующим сценарием:
Определите идентификатор транзакции, которую необходимо отменить:
dnf historyОпционально. Убедитесь, что это необходимая транзакция, выполнив следующую команду:
dnf history info <transaction_id>Замените
<transaction_id>на необходимый идентификатор транзакции.Чтобы отменить конкретную транзакцию, используйте:
dnf history undo <transaction_id>Опционально. Чтобы отменить последнюю транзакцию, используйте:
dnf history undo last
Примечание
Команда dnf history undo отменяет только те шаги, которые были выполнены во время транзакции. Если транзакция установила новый пакет, команда dnf history undo удаляет его. Если транзакция удалила пакет, команда dnf history undo переустанавливает его. Команда dnf history undo также пытается откатить назад все обновленные пакеты до их предыдущих версий, если старые пакеты все еще доступны.
Для отмены всех транзакций dnf, выполненных между указанной и последней транзакциями, воспользуйтесь следующим сценарием:
Определите идентификатор транзакции, до которой необходимо отменить:
dnf historyЧтобы отменить все транзакции между указанной
<transaction_id>и последней, используйте:dnf history rollback <transaction_id>Опционально. Чтобы отменить все транзакции в истории транзакций, используйте:
dnf history rollback 1
Управление репозиториями программного обеспечения#
Информация о конфигурации для dnf и связанных с ней утилит хранится в файле /etc/yum.conf. Этот файл содержит один или несколько разделов [repository], которые позволяют устанавливать параметры, зависящие от репозитория. Рекомендуется определять отдельные репозитории в новых или существующих .repo файлах в каталоге /etc/yum.repos.d/.
Важно
Значения, которые определены в отдельных разделах [repository] файла /etc/yum.conf, переопределяют значения, установленные в разделе [main].
Конфигурационный файл /etc/yum.conf содержит разделы [repository], где repository - это уникальный идентификатор репозитория. Разделы [repository] позволяют определять отдельные репозитории dnf.
Добавление репозитория#
Добавить репозиторий можно с помощью команды dnf config-manager --add-repo:
dnf config-manager --add-repo <repository_URL>
Замените <repository_URL> URL-адресом, указывающим на репозиторий.
При необходимости можно просмотреть и обновить настройки репозитория, добавленного как файл /etc/yum.repos.d/<repository_URL>.repo, используя команду:
cat /etc/yum.repos.d/<repository_URL>.repo
Включение репозитория#
Включите определенный репозиторий dnf, чтобы разрешить установку или обновление определенных пакетов.
Чтобы включить репозиторий, используйте:
dnf config-manager --enable <repository_id>
Замените <repository_id> на необходимый идентификатор репозитория.
Отключение репозитория#
Отключите определенный репозиторий dnf, чтобы предотвратить установку или обновление определенных пакетов.
Чтобы отключить репозиторий dnf, используйте:
dnf config-manager --disable <repository_id>
Замените <repository_id> на необходимый идентификатор репозитория.
Установка и использование Python#
В SberLinux OS Server Python 3 распространяется в версиях 3.9 и 3.11, предоставляемых модулями python39 и python311.
Установка Python 3#
Можно установить 8 модулей параллельно, включая модули python39 и python311. Обратите внимание, что параллельная установка не поддерживается для нескольких потоков одним модулем.
Чтобы установить Python 3.9 для модуля
python39, введите:dnf install python39Поток модуля
Python39:3.9включается автоматически.Чтобы установить Python 3.11 для модуля
python310, введите:dnf install python311Поток модуля
Python310:3.11включается автоматически.Python 3.11 и созданные для него пакеты могут быть установлены параллельно с Python 3.9 в одной системе.
Для установки пакетов из стека
python3.11используйте, например:python3.11 python3.11 -m pipЧтобы проверить версию Python, установленную в системе, используйте:
Python 3.9:
python3.9 --versionPython 3.11:
python3.11 --version
Установка дополнительных пакетов Python 3#
Пакеты с дополнительными модулями для Python 3.9 включают префикс python39-. Всегда включайте префикс при установке дополнительных пакетов Python, как показано в примерах ниже.
Чтобы проверить наличие дополнительных пакетов в репозитории, используйте одну из следующих команд:
Вывести список всех пакетов для Python:
dnf list python-*Вывести список всех пакетов для Python 3:
dnf list python3-*Вывести список всех пакетов для Python 3.11:
dnf list python3.11-*
Установка дополнительных инструментов Python 3 для разработчиков#
Дополнительные инструменты Python для разработчиков распространяются через репозиторий Code Ready Linux Builder в соответствующем модуле python3x-devel.
Модуль python38-devel содержит пакет python 38-pytest и его зависимости: пакеты pyparsing, atomic writes, attrs, packaging, py, more-itertools, pluggy и wcwidth.
Модуль python39-devel содержит пакет python 39-pytest и его зависимости: пакеты pyparsing, attrs, packaging, py, more-itertools, pluggy, wcwidth, iniconfig и pybind11. Модуль python 39-devel также содержит пакеты python 39-debug и python 39-Cython.
Примечание
Репозиторий Code Ready Linux Builder и его содержимое не поддерживаются SberLinux OS Server.
Чтобы установить пакеты из модуля python39-devel, выполните:
Включите репозиторий Code Ready Linux Builder:
subscription-manager repos --enable codeready-builder-for-sberlinux-8-x86_64-rpmsВключите
python39-develмодуль:yum module enable python39-develУстановите
python 39-pytestпакет:yum install python39-pytest
Чтобы установить пакеты из модуля python38-devel, замените python 39- на python 38- в приведенных выше командах.
Установка Python 2#
Некоторые приложения и скрипты еще не были полностью перенесены на Python 3 и требуют запуска Python 2. SberLinux OS Server допускает параллельную установку Python 3 и Python 2. Если нужна функциональность Python 2, установите модуль python27, который доступен в репозитории AppStream.
Внимание
Python 3 является основным направлением разработки проекта Python. Поддержка Python 2 постепенно прекращается. Модуль python27 имеет более короткий период поддержки, чем SberLinux OS Server.
Для установки и настройки Python 2 выполните следующие шаги:
Чтобы установить Python 2.7 из модуля
python27, используйте:yum install python2Поток модуля
python27:2.7включается автоматически.Пакеты с дополнительными модулями для Python 2 обычно используют
python2-префикс. Всегда включайте префикс при установке дополнительных пакетов Python, как показано в примерах ниже.Чтобы установить модуль запросов для Python 2, используйте:
yum install python2-requestsЧтобы установить расширение Cython на Python 2, используйте:
yum install python2-CythonОпционально Чтобы проверить версию Python, установленную в системе, используйте:
python2 --version
Примечание
По замыслу можно устанавливать модули SberLinux OS Server параллельно, включая модули python27, python36, python38 и python39.
Переход с Python 2 на Python 3#
Можно перенести свой прежний код, написанный на Python 2, на Python 3.
Для получения дополнительной информации о том, как перенести большие базы кода на Python 3, см. Консервативное руководство по переносу Python 3.
Обратите внимание, что после этой миграции исходный код Python 2 становится интерпретируемым интерпретатором Python 3 и остается интерпретируемым и для интерпретатора Python 2.
Использование Python#
При запуске интерпретатора Python или команд, связанных с Python, всегда указывайте версию.
Чтобы запустить интерпретатор Python 3.9 или связанные с ним команды, используйте, например:
python2
python2 -m cython --help
pip2 install package