Pip настройка директории для установки пакетов
Pip по умолчанию ставит пакеты в AppData\Roaming\Python\Python38\ что несколько не устраивает.
Хотелось бы вернуть старое поведение когда все пакеты ставились в папку с python, или же указать произвольную папку для установки по умолчанию. Устанавливать каждый раз через -target неудобно.
Есть возможность это поправить?
Ответы (2 шт):
Можно либо создать конфиг файл для pip, где описать дефолтные значения для ключей командной строки, либо установить специальным образом именованые переменные окружения. Оба способа описаны в юзерзгайде pip https://pip.pypa.io/en/stable/user_guide/#config-file
Как вариант, можно ставить зависимости в рантайме, у меня есть библиотечка для этого. После окончания работы программы в системе вообще никаких библиотек не остается, то есть становится по сути не важно, куда и как их устанавливать.
Установить библиотеку можно так:
pip install instld
Это можно сделать один раз и прямо в систему.
Далее использование сводится к применению контекстного менеджера:
import installed
with installed('some_package') as context:
import some_module
При входе в контекст, создается временная директория, в которую устанавливаются все пакеты. После выхода из контекста пакеты удаляются, а в программе остается лишь те модули, что вы успели импортировать, пока выполнение происходило внутри контекста. Контексты изолированы друг от друга, их можно вкладывать или запускать один за другим, что позволяет в рамках одного рантайма пользоваться несколькими разными версиями одной библиотеки или даже библиотеками, чьи зависимости несовместимы, и которые иным способом не заставить работать вместе в рамках одной программы.
Учитывайте, что у установки зависимостей в рантайме есть свои минусы. Это создает дополнительную нагрузку на диск и на сеть, а также вносит дополнительные задержки в работу программы. Но в некоторых случаях это имеет смысл. Вот некоторые из них:
- У вас просто нет другого способа запустить конфликтующие зависимости или разные версии одной библиотеки одновременно.
- Вы пишете бенчмарк или тест какой-то библиотеки и вам интересно попробовать несколько версий. Тогда вы можете перебрать их в цикле, открывая на каждой итерации по новому контексту.
- Вы выбираете из нескольких библиотек одного класса и экспериментируете с ними в командной оболочке. В этом случае постоянно выходить из оболочки и выполнять pip install не очень удобно, плюс потом бы пришлось подчищать за собой "мусор" (удалять те пакеты, которые не прошли отбор).
- Вы решили поделиться скриптом с другом и хотите отправить его одним файлом. В этом случае удобнее спрятать установку зависимостей прямо в этот файл.