Что делать если нужно поставить какую-то 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
Время Hydroporus’ов #Dytiscidae — крупный и порой запутанный род жуков-плавунцов.
На фотоколлаже детали строения с брюшной стороны (отростки заднегруди и скульптура последнего вентрита), а также рисунки двух видов из memnonius-group (гы-гы в названии есть слово «мем» 🌚): готовый рисунок (ну почти — еще детали добавлю) и заготовка на ближайшие дни.
Beetles of the World🪲
Весна идет, весне дорогу!
Вот и у нас полетели расселяться после зимовки жуки-плавунцы рода Colymbetes #Dytiscidae.
На фото: Colymbetes striatus (Linnaeus, 1758), пойманный и зафиксированный Ильей Турбановым.
Beetles of the World🪲 — первый жучиный
Первый пост (ниже) нашего канала. Уже и вид переопределили — это Agabus safei Abdul-Karim et Ali, 1986 #Dytiscidae, и статья о находке давно вышла. Но как память — дело важное. Историческое, возможно )
Ты не ты, когда голоден.
Видео о том как выращивают пищу. Здесь это водные жуки рода Cybister#Dytiscidae и ферма по их «производству». Ну и рецепт хозяйке на заметку…
А о том, где в мире и каких насекомых едят больше и лучше, мы когда-то приводили вот такую инфографику.
За видео спасибо Азату Кадирову и нашему боту для предложки @ColeopteraBot.
Beetles of the World🪲 за полезное питание.
Слово дня — эпипенит (epipenite). Склеритизованная «деталь», входящая наряду с парамерами и срединной долей (пенисом) в состав эдеагуса некоторых жуков, например, плавунцов рода Hydaticus#Dytiscidae. Форма эпипенита и его положение имеет систематическое и диагностическое значение, как в выделении подродов, так и для отличия близких видов.
Beetles of the World🪲 — первый жучиный
Не самый крупный плавунец.
Не уверен, но кажется, что Bidessus straeleni Omer-Cooper, 1974 #Dytiscidae из Гвинеи.
Beetles of the World🪲 — первый жучиный
Австралиец в здании. Мелкий плавунец Hydroglyphus trifasciatus (Watts, 1978) #Dytiscidae. Фото для нас с вами и для коренных жителей Австралийского континента.
Beetles of the World🪲
Нейросеть, остановись, куда тебе столько усиков? Слева сгенерированная ИИ голова усача. А вот справа — реальный случай с самкой плавунца Dytiscus marginalis#Dytiscidae.
Так, словно по концепции Бейтсона,
описывает ситуацию, в которой субъект получает взаимно противоречащие указания, принадлежащие к разным уровням коммуникации. Например, на словах выражается любовь, а параллельно невербально выражают ненависть.
произошла зеркальная регенерация поврежденной конечности. У представленного образца случился частичный отрыв левой передней конечности
предположительно на личиночной стадии. А уже при окукливании произошла двойная регенерация, и получился такой вот «многорукий Шива-плавунец».
Beetles of the World🪲
Есть сок восстановленный, есть такой же жук: некоторые конечности пришлось дополнить, но вид не самый частый, поэтому, думаю, оно того стоит с эстетической точки зрения.
Прямиком из Якутии — её «однофамилец» Agabus (Gaurodytes) yakutiae Nilsson & Larson, 1990 #Dytiscidae
За предоставленный для фото экземпляр спасибо Петру Николаевичу Петрову.
Beetles of the World🪲
Всех с днем науки!
А у нас на сегодня странный мальчик Hydroporus acutangulus-complex #Dytiscidae, вероятно, деформированный на предмет гениталий, но может и новый вид, жаль, что такой одинокий в сборах.
Загадки во тьме на Beetles of the World🪲