Стандартные библиотеки и сторонние библиотеки Python
28 января 2016 г.
Archy
Просмотров: 26173
RSS
Обсудить
Python для начинающих
библиотеки python, стандартные библиотеки python, сторонние библиотеки библиотеки python

Стандартная библиотека состоит из множества модулей, объединенных в пакеты,и поставляется в составе Python. Она включает большое количество функций и классов, выполняющих различные типовые задачи программирования. Там мы можем найти инструменты для сложной обработки строк, объявления новых типов данных, средства для обмена данными по сети, шифрования и дешифрования, работы с файлами, разработки многопоточных приложений и многое другое.
Давайте для примера возьмем модуль datetirne. В нем объявлен класс date, позволяющий хранить и обрабатывать значения даты:
from datetime import date
Импортируем класс date из модуля datetime:
now = date.today()
Метод класса today возвращает объект, класса date, хранящий текущее значение даты:
birthday = date(1970, 10, 27)
Создаем еще один объект класса date, хранящий дату 27 октября 1970 года:
delta = now - birthday days = delta.days
Получаем количество дней, прошедших между этими датами. (Его хранит свойство days класса date.)
Также в стандартной библиотеке объявлен класс Fraction, который мы рассмотрели ранее.
Вы знали что есть сторонние библиотеки работающие с медиаплеером tronsmart orion r28? Недавно на гитхабе встретил, библиотека совместима с Python 2.7 и Python 3.x.
Стандартная библиотека хранится в папке Lib папки, в которую установлен Python. Полные имена сущностей, объявленных в стандартной библиотеке, формируются относительно этой папки.
Помимо стандартной библиотеки, поставляемой в составе Python, мы можем загрузить и установить любое количество сторонних библиотек. Они разрабатываются силами сторонних программистов ( отчего и получили свое название ), а существует их столько, что мы можем без труда найти ту, что нам нужна.
Все сторонние библиотеки устанавливаются в папку site-packages, что автоматически создается в упомянутой ранее папке Lib. Полные имена сущностей, объявленных в сторонних библиотеках, формируются относительно этой папки.
Еще записи по теме
- Запись данных в файл
- Подсчет ссылок и сборка мусора в Python
- Создание базы данных SQLite в Python
- Наследование. Объектно-ориентированное программирование в Python
- Основы SQLite — С чего начать?
- Доступ к базе данных SQLite из Python
- Множественное наследование в Python
«pip -t» — простая альтернатива virtualenv
Установка зависимостей — обязательный шаг практически для любого приложения на Питоне. Каждое приложение зависит от разных библиотек, и чтобы гарантировать его правильное поведение, лучше устанавливать в точности правильные версии библиотек.
Обычная практика — включать в проект файл requirements.txt . В этом файле перечислены все библиотеки, от которых зависит проект, с номерами версий. Если файл на месте, установить зависимости просто:
$ pip install -r requirements.txt
Пока все хорошо. Плохо станет, если у вас два и больше проектов с конфликтующими зависимостями. Допустим, проект A работает с библиотекой X только версии 0.1, а проект B — 0.2. По умолчанию pip устанавливает библиотеки глобально в папку интерпретатора Питона. Это означает, что команда $ pip install X==0.2 установит библиотеку X версии 0.2 для всех проектов и перезапишет версию 0.1, если та уже установлена. Переключение между A и B означает глобальную переустановку X каждый раз, что долго и неудобно.
Остров под солнцем
Популярное решение этой частой проблемы — виртуальные окружения. Фреймворк virtualenv создает изолированные Питон-окружения. Зависимости каждого проекта отделяются друг от друга. Так или иначе, некоторым пользователям virtualenv кажется слишком сложным. Поэтому существуют пакеты типа virtualenvwrapper и autoenv, которые расширяют функциональность virtualenv, чтобы им было проще пользоваться. Другие решения: Anaconda environments и pyvenv из стандартной библиотеки Питона (3.3+).
Все это отличные инструменты, но нам всегда казалось, что они предлагают довольно тяжелые и сложные решения простой, в общем-то, задачи.
В мире Яваскрипта npm и Bower предлагают простое, надежное и мощное управление пакетами, которого как будто не хватает в Питоне. Их ключ к успеху в том, что они скачивают правильную версию правильной библиотеки и кладут ее в специальную папку внутри проекта. Скачанные библиотеки относятся только к конкретному проекту. Это автоматически избавляет от проблем, о которых говорилось выше.
Чистая магия
- добавить ./.pip в PYTHONPATH ,
- использовать pip с параметром -t .pip для локальной установки пакетов.
Фокус работает, потому что ./.pip — относительный путь. В результате, когда запускаете python из ~/dev/project_a , папка ~/dev/project_a/.pip включается в список папок библиотек для этого экземпляра Питона. Запускаете python в ~/dev/project_b — включается ~/dev/project_b/.pip . Прием работает на всех популярных платформах: Линуксе, Маке и Виндоузе.
Название папки .pip , конечно, может быть любым. Кому-то больше понравится pip_components или libs . Тем не менее, .pip быстро печатать, а точка в начале делает папку скрытой в Линуксе и Маке.
Шаг 1: Установить PYTHONPATH
-
MAC/LINUX
Эта команда установит PYTHONPATH навсегда для стандартных терминальных сессий:
$ echo 'export PYTHONPATH="./.pip:$PYTHONPATH"' >> ~/.bash_profile
После этого перезапустите терминал или исполните $ source .bash_profile , чтобы PYTHONPATH загрузилась в активной сессии. В зависимости от платформы вам, возможно, надо будет заменить ~/.bash_profile на ~/.bashrc .
Шаг 2: Установить пакеты через pip -t
Теперь, когда PYTHONPATH установлена, осталось только установить пакеты в правильное место с помощью pip. Для этого используем ключ -t или —target :
$ cd project_a project_a$ pip install requests==2.7.0 -t .pip project_a$ python >>> import requests >>> requests.__version__ '2.7.0'
Теперь то же самое в другом проекте с другой версией:
$ cd project_b project_b$ pip install requests==2.6.0 -t .pip project_b$ python >>> import requests >>> requests.__version__ '2.6.0'
С файлом requirements.txt все работает так же:
$ pip install -r requirements.txt -t .pip
Потенциальные засады
Разные интерпретаторы Питона
Можно легко запустить программу другим интерпретатором Питона:
$ /path/to/python main.py
Тем не менее, есть проблема с переключением между Питоном 2 и 3, если используются пакеты, которые компилируют исходный код во время установки через 2to3 . У таких пакетов нет единой кодовой базы, при установке код генерируется соответственно активной версии Питона.
В этом случае создайте папку типа .pip3 и добавьте ее в начало PYTHONPATH, когда запускаете код Питоном 3.
easy_install
Если у вас есть пакеты, установленные глобально через easy_install , столкнетесь с проблемой: easy_install дописывает путь к таким пакетам в начало sys.path , поэтому у них приоритет над пакетами из .pip .
Решение — избавиться от пакетов, установленных глобально через easy_install.
Чтобы проверить, что ничто не мешает использовать .pip, запустите import sys;sys.path в Питоне. Если перед ./.pip будут другие пути, возможно, придется сначала почистить систему от глобальных easy_install-пакетов.
Где pip устанавливает свои пакеты?

Часто при использовании инструмента для установки пакетов Python, pip, возникает вопрос о том, где именно устанавливаются загруженные пакеты. В частности, это становится актуальным, когда пользователь работает с виртуальным окружением, созданным с помощью инструмента virtualenv.
Допустим, была выполнена команда:
pip install requests
Эта команда устанавливает пакет «requests» с помощью pip. Но где именно он устанавливается? В какой директории его можно найти?
Пакеты, установленные с помощью pip, обычно устанавливаются в директории, где установлен Python. Они располагаются в поддиректории «site-packages».
Если установка происходит в виртуальном окружении, то пакеты устанавливаются в директорию этого виртуального окружения. Снова, они будут находиться в поддиректории «site-packages».
Таким образом, если, например, используется виртуальное окружение, созданное в директории «myenv», то пакеты будут установлены в директории «myenv/lib/pythonX.Y/site-packages», где «X.Y» — это версия Python, используемая в виртуальном окружении.
Если же Python и pip установлены глобально, то пакеты будут установлены в директории «lib/pythonX.Y/site-packages» в директории установки Python.
В любом случае, для того чтобы узнать точное местоположение установленного пакета, можно воспользоваться модулем «site» в Python. Следующая команда выведет список всех директорий, где pip ищет пакеты:
python -m site
Также можно использовать следующую команду для вывода директории установки конкретного пакета:
python -c "import package; print(package.__path__)"
Здесь «package» — это имя установленного пакета.
Итак, теперь стало ясно, где pip устанавливает пакеты и как найти их местоположение.
Pip настройка директории для установки пакетов
Pip по умолчанию ставит пакеты в AppData\Roaming\Python\Python38\ что несколько не устраивает. Хотелось бы вернуть старое поведение когда все пакеты ставились в папку с python, или же указать произвольную папку для установки по умолчанию. Устанавливать каждый раз через -target неудобно. Есть возможность это поправить?
Отслеживать
задан 23 авг 2020 в 15:04
3,186 2 2 золотых знака 9 9 серебряных знаков 16 16 бронзовых знаков
А где сам питон стоит? Сколько питон не ставил (всегда в c:/python) — всегда туда же и пакеты падают.
23 авг 2020 в 15:43
c:/python там и установлен, и да раньше все было ок.. а в последних версиях что-то поменялось.
26 авг 2020 в 20:46
Ну из идей. может влияет чекбокс «установить питон для всех пользователей», ведь в результате это должно запрещать ему ставить пакеты в папку конкретного пользователя. Ну и права на запись.
26 авг 2020 в 22:43
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Можно либо создать конфиг файл для pip, где описать дефолтные значения для ключей командной строки, либо установить специальным образом именованые переменные окружения. Оба способа описаны в юзерзгайде pip https://pip.pypa.io/en/stable/user_guide/#config-file
Отслеживать
ответ дан 23 авг 2020 в 18:53
2,261 1 1 золотой знак 8 8 серебряных знаков 11 11 бронзовых знаков
Как вариант, можно ставить зависимости в рантайме, у меня есть библиотечка для этого. После окончания работы программы в системе вообще никаких библиотек не остается, то есть становится по сути не важно, куда и как их устанавливать.
Установить библиотеку можно так:
pip install instld
Это можно сделать один раз и прямо в систему.
Далее использование сводится к применению контекстного менеджера:
import installed with installed('some_package') as context: import some_module
При входе в контекст, создается временная директория, в которую устанавливаются все пакеты. После выхода из контекста пакеты удаляются, а в программе остается лишь те модули, что вы успели импортировать, пока выполнение происходило внутри контекста. Контексты изолированы друг от друга, их можно вкладывать или запускать один за другим, что позволяет в рамках одного рантайма пользоваться несколькими разными версиями одной библиотеки или даже библиотеками, чьи зависимости несовместимы, и которые иным способом не заставить работать вместе в рамках одной программы.
Учитывайте, что у установки зависимостей в рантайме есть свои минусы. Это создает дополнительную нагрузку на диск и на сеть, а также вносит дополнительные задержки в работу программы. Но в некоторых случаях это имеет смысл. Вот некоторые из них:
- У вас просто нет другого способа запустить конфликтующие зависимости или разные версии одной библиотеки одновременно.
- Вы пишете бенчмарк или тест какой-то библиотеки и вам интересно попробовать несколько версий. Тогда вы можете перебрать их в цикле, открывая на каждой итерации по новому контексту.
- Вы выбираете из нескольких библиотек одного класса и экспериментируете с ними в командной оболочке. В этом случае постоянно выходить из оболочки и выполнять pip install не очень удобно, плюс потом бы пришлось подчищать за собой «мусор» (удалять те пакеты, которые не прошли отбор).
- Вы решили поделиться скриптом с другом и хотите отправить его одним файлом. В этом случае удобнее спрятать установку зависимостей прямо в этот файл.