Что делать если нужно поставить какую-то Python-библиотеку а root-прав нет? То есть в систему библиотеку никак и ничего не поставить.
Есть как минимум два способа это решить правильно!
🔸 Сделать виртуальное окружение и ставить там что угодно.
Это позволит создать полностью независимое исполняемое окружение для ваших приложений.
Все библиотеки будут храниться в домашней директории юзера а значит доступ на запись имеется.
Создать очень просто:
python3 -m venv ~/venvs/myenvname
Теперь активируем окружение
# Linux
source ~/venvs/myenvname/bin/activate
# Windows
%userprofile%\venvs\myenvname\Scripts\activate.bat
Можно ставить любые библиотеки и запускать приложение.
Это стандартный метод работы с любым проектом. Если еще не используете его, то пора начинать. Даже при наличии root доступа!
🔸 Бывает, что нет возможности запустить приложение из своего виртуального окружения. Например, его запускает какой-то сервис от вашего юзера и вставить активацию окружения вы не можете.
В этом случае можно установить библиотеки для Python не глобально в систему, а только для юзера.
Выполните этот код в консоли:
python3 -m site
Вы получите что-то такое:
sys.path = [
'/home/user',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/home/user/.local/lib/python3.7/site-packages',
...
]
USER_BASE: '/home/user/.local'
USER_SITE: '/home/user/.local/lib/python3.7/site-packages'
ENABLE_USER_SITE: True
Нас интересует параметр USER_SITE. Это путь к пользовательским библиотекам, которые доступны по умолчанию, если они есть.
Именно сюда будут устанавливаться модули если добавить флаг --user при установке чего-либо через pip
pip install --user requests
Для этой команды не нужны root-права.
После неё можно запускать системный интерпретатор без виртуальных окружений и установленная библиотека будет доступна для текущего юзера.
Параметр USER_BASE показывает корневую директорию для хранения user-библиотек. Её можно изменить с помощью переменной окружения PYTHONUSERBASE
export PYTHONUSERBASE=~/pylibs
python3 -m site
...
USER_BASE: '/home/user/pylibs'
USER_SITE: '/home/user/pylibs/lib/python3.7/site-packages'
Получается некоторое подобие виртуального окружения для бедных 😁 которое можно менять через эту переменную (не делайте так!Лучше venv!)
🔸 Дописывание пути в PYTHONPATH
Этот способ не входит в список "двух правильных", но тоже рабочий. Здесь придётся сделать всё несколько сложней.
Сначала ставим библиотеку в любое место указывая путь установки
pip3 install -t ~/mylibs modulename
Библиотека установится без привязки к какому-либо интерпретатору. То есть по умолчанию не будет видна. Теперь в нужный момент добавляем этот путь в sys.path или в PYTHONPATH.
Не буду советовать так делать. Единственный раз когда этот способ мне пригодился и решил поставленную задачу, это при создании общей библиотеки для кластера компьютеров.
Модули лежат в сети и подгружаются для всех из одного и того же места. То есть обновлять файлы требуется только один раз а не на всех хосты отдельно.
Минусы такого подхода:
▫️Нужно всем хостам пробить нужный путь в .bashrc или ещё куда-то чтобы он сетапился на старте.
▫️Чем больше хостов тем больше нагрузка на сеть. Иногда такой способ не подходит именно по этой причине. Тогда Ansible вам в помощь.
▫️Не очень подходит если хосты с разными операционками. Некоторые библиотеки различаются для Linux и Windows (там, где есть бинарники) и приходится мудрить более сложные схемы.
#tricks#basic
🗽 Los jugadores de los Yankees quieren usar uniformes alternativos en partidos de visitante. ¿Deberían los Yankees comenzar a usar jerseys alternativos por primera vez en la historia de la franquicia?
#Yankees
🗞 | t.me/MLB_Daily
🗽 La camiseta de práctica de bateo azul marino de los Yankees ha sido aprobada por la MLB para ser usada en partidos, ya que forma parte de su conjunto de uniformes oficiales. Aún está por determinar si realmente la usarán en un partido.
#Yankees
🗞 | t.me/MLB_Daily
🧢🗽 Una mirada a la nueva rotación proyectada para los Yankees en el Día de Apertura después de que, según se informa, adquirieran a Ryan Weathers de los Marlins.
📊 Proyecciones a través de FanGraphs
#️⃣#Yankees
🗞 | t.me/MLB_Daily
📊 Los dos mejores jugadores de posición y los dos mejores lanzadores por fWAR esta temporada son TODOS de los New York Yankees 🤯
#Stats#Yankees
🗞 | t.me/MLB_Daily
💥 Lourdes Gurriel Jr será el primer cubano en ver acción en el #OpeningDay.
👉 Enfrentará a los #Yankees y partirá en el 6to turno y LF.
@CirculodeEspera
🏴☠️🗽 Paul Skenes quiere jugar para los Yankees, le dijo uno de sus compañeros de los Pirates a @randarino. Según se informa, Skenes no tiene confianza en que los Pirates alguna vez ganen, y quiere ser cambiado mucho antes de que comience su agencia libre después de la temporada 2029.
🗞 Vía Tal'kin Baseball
#️⃣#Skenes#Yankees
🗞 | t.me/MLB_Daily
🗽🗽 Aaron Judge continúa grabando su nombre en la historia de los Yankees empatando a Derek Jeter, Robinson Canó, Jorge Posada y a Dave Winfield como los máximos ganadores de Bates de plata en la historia de la franquicia.
#️⃣#Yankees#Judge
🗞 | t.me/MLB_Daily
🗽🩸 Aroldis Chapman dice que se sintió irrespetado por los Yankees y que se retiraría antes de volver a jugar para ellos.
#️⃣#Yankees#Chapman
🗞 | t.me/MLB_Daily
🗽🗽 Los Yankees y Cody Bellinger llegaron a un acuerdo por cinco años y $162.5 millones, según fuentes de ESPN. Hay cláusulas de rescisión después de la segunda y tercera temporada, un bono de firma de $20 millones y una cláusula de no intercambio completa.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily
❌🗽 Según Jorge Castillo, se espera que Cody Bellinger opte por no continuar con su contrato con los Yankees y se convierta en agente libre.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily