Резюме
Есть три основных категории модулей, с которыми вы имеете дело:
- Те поддерживающие программы установлены для всех пользователей с системой пакетов ОС. (Это может даже включать инструменты и библиотеки, используемые людьми, программирующими на Python; см. Ниже.) Для них вы используете пакеты ОС, где можете, и
pip
устанавливаете в системные каталоги, где это необходимо.
- Те, которые поддерживают программы, установленные конкретным пользователем только для ее собственного использования, а также для определенных аспектов ее "повседневного" использования Python в качестве языка сценариев. Для этого она использует
pip --user
, возможно, pyenv или pythonz , и подобные инструменты и тактику.
- Те, кто поддерживает разработку и использование конкретного приложения. Для этого вы используете
virtualenv
(или аналогичный инструмент).
Каждый уровень здесь также может получать поддержку от предыдущего уровня. Например, наш пользователь в (2) может полагаться на интерпретатор Python, установленный через пакеты ОС.
Остановимся на этом поподробнее:
Системные программы и пакеты
Программы, написанные на Python, которые вы хотите «просто запустить», просты: просто используйте инструменты установки ОС и позвольте им вносить все, что им нужно; это ничем не отличается от не-Python программы. Это может привести к появлению инструментов / библиотек Python (таких как сам интерпретатор Python!), На которые пользователи вашего компьютера могут начать полагаться; это не проблема, если они понимают зависимость и, в идеале, знают альтернативные способы ее обработки на хостах, которые не предоставляют этих зависимостей.
Типичным и простым примером такой зависимости являются некоторые из моих личных сценариев, ~/.local/bin/
которые начинаются с #!/usr/bin/env python
. Они будут хорошо работать (если они работают под Python 2) в RH / CentOS 7 и большинстве (но не во всех) Ubuntu устанавливаются; они не будут установлены при базовой установке Debian или в Windows. Мне не нравится, что моя личная среда сильно зависит от пакетов ОС (я работаю на нескольких разных ОС), что-то вроде этого я нахожу вполне приемлемым; Мой план резервного копирования на редких хостах, которые не имеют системного Python и не могут его получить, состоит в том, чтобы использовать систему User, как описано ниже.
Люди, использующие системный интерпретатор Python, также обычно зависят от системы pip3
. Это то, где я обычно рисую линию на моих системных зависимостях; все virtualenv
впереди я имею дело с собой. (Например, мой стандартный сценарий активации основан на том pip3
или pip
ином пути, но загружает свою собственную копию virtualenv
для начальной загрузки создаваемой виртуальной среды.
Тем не менее, возможно, существуют обстоятельства, когда совершенно разумно сделать доступной больше среды разработки. У вас могут быть интерфейсы Python в сложные пакеты (например, СУБД), где вы хотите использовать системную версию этого, и вы чувствуете, что лучше всего также позволить системе выбирать конкретный код библиотеки Python, который вы будете использовать для общения с ним. Или вы можете развернуть множество хостов с базовой средой разработки для класса Python, и вам будет проще автоматизировать их с помощью стандартных системных пакетов.
Пользовательские ежедневные программы и пакеты
У пользователей могут быть библиотеки или программы Python, которые плохо вписываются в виртуальную среду, потому что они в первую очередь хотят помочь создать виртуальные среды (например, virtualenvwrapper ), или это те вещи, которые вы обычно используете из командной строки, даже когда делать не-Python работу. Даже если у них есть возможность устанавливать их системные версии, они могут чувствовать себя более комфортно, устанавливая свои собственные версии (например, потому что они хотят использовать последнюю версию инструмента и его зависимостей).
Обычно pip --user
это то, что люди будут использовать для этого, хотя некоторые зависимости, такие как сам интерпретатор Python, требуют немного большего. pyenv и pythonz полезны для создания личных интерпретаторов (независимо от того, установлены ли они в ~/.local/bin
качестве интерпретатора по умолчанию или иным образом), и, конечно, всегда можно просто собрать «вручную» из исходного кода, если библиотеки dev доступны.
Я стараюсь сохранить минимальный набор установленных здесь вещей: virtualenvwrapper (потому что я использую его постоянно) и, возможно, последнюю версию pip. Я стараюсь избегать зависимостей вне стандартной библиотеки или Python 3 для личных сценариев, которые я пишу для использования на многих хостах. (Хотя мы увидим, как долго я смогу продержаться с этим, поскольку все больше и больше этих личных сценариев переносятся в Python.)
Отдельные среды разработки приложений и среды выполнения
Это обычная виртуальная вещь. Для разработки вы почти всегда должны использовать virtualenv, чтобы гарантировать, что вы не используете системные зависимости, или часто более одной для тестирования различных версий Python.
Эти виртуальные среды также хороши для приложений с большим количеством зависимостей, где вы хотите избежать загрязнения своей пользовательской среды. Например, я обычно настраиваю virtualenv для работы с ноутбуками Jupyter и тому подобным.