Куда устанавливаются библиотеки python
Перейти к содержимому

Куда устанавливаются библиотеки python

  • автор:

Стандартные библиотеки и сторонние библиотеки Python

28 января 2016 г. Archy Просмотров: 26173 RSS Обсудить
Python для начинающих библиотеки 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 устанавливает свои пакеты?

Representing Python package installation in global and virtual environments.

Часто при использовании инструмента для установки пакетов 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 не очень удобно, плюс потом бы пришлось подчищать за собой «мусор» (удалять те пакеты, которые не прошли отбор).
  • Вы решили поделиться скриптом с другом и хотите отправить его одним файлом. В этом случае удобнее спрятать установку зависимостей прямо в этот файл.

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

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