Что делать если нужно поставить какую-то 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
A map of the Israeli Airstrikes on the Lebanese Beqaa region that took the lives of 63 civilians and i jured more than 100 people in a raid of more than 100 airstrikes targeting the region.
#LebanonUnderAttack
Genocidal Psychopaths of the Zionist Israeli terrorist army blow up the entire Lebanese bordering Village of Mhaybeeb this morning on October 16, 2024.
#LebanonUnderAttack
#Israel carried out a large-scale massacre today, November 1, 2024, in the Lebanese towns of Baalbek district. 52 people were killed, 72 wounded, and 9 remain missing after 25 airstrikes by Israeli warplanes conducted over two hours, from 2 p.m. to 4 p.m.
#LebanonUnderAttack
Even in the darkest times of #war, humor becomes a tool for resilience, offering brief moments of relief and a way to cope with the harsh realities. It’s a reminder that laughter, no matter how fleeting, can be a powerful act of defiance and hope in the face of adversity.
#LebanonUnderAttack
The Lebanese Ministry of Health's Emergency Operations Center reported that the death toll from the Israeli assault has climbed to 2,653, with 12,360 others wounded since October 8, 2023. This staggering rise reflects the continuous bombardment and escalating violence.
#Israel#Lebanon#LebanonUnderAttack
#Hezbollah carried out a series of coordinated rocket and drone attacks, targeting Israeli military sites, gatherings, and settlements. The operations resulted in casualties and showcased the group's ongoing military capabilities.
#LebanonUnderAttack#Israel
#Israel conducted heavy airstrikes overnight in #Beirut suburbs on the Mreijeh area taking out an entire neighborhood turning it to rubble.
#LebanonUnderAttack
Israel has struck Beirut once again, this time targeting Mar Elias Street; the heart of the capital and one of its most densely populated areas during the war, as countless displaced families from the suburbs have sought refuge there.
This relentless aggression is not just an attack on civilians; it’s a blatant violation of all norms of international law, crossing every red line.
#LebanonUnderAttack
#BeirutUnderAttack
Zionist Israeli Psychopaths hit a home in Ayto town in #Zgharta north #Lebanon that was housing families displaced from South Lebanon and Beirut suburbs. 25 humans in the house, the Red cross so far said that 18 are martyred.
I will not share any videos or photos, as many of the women might be hijabis, and the footage shows them in heartbreaking scenes without their hijabs.
#LebanonUnderAttack
Devastation in the heart of Beirut: On the night of November 17, #Israel targeted a densely populated building on the famous Mar Elias Street, setting off a massive fire that raged through the night. The building housed motor generators and an electronics shop, where lithium batteries likely fueled the inferno, adding to the chaos and destruction.
#LebanonUnderAttack#WarCrimes#Beirut
Ophthalmologist MP Elias Jradeh reveals that a blockade was imposed on Lebanon regarding the import of corneas after the Pagers bombing, which led to their disappearance from the local market and harmed various Lebanese citizens.
#Lebanon#PagersAttack#Hezbollah#LebanonUnderAttack
In a heartbreaking video, Julia shared moments while she was playing the piano in her home in Khiam, South Lebanon, which she discovered in a video circulated by Israeli soldiers that was destroyed during the border clashes when they were attempting to occupy her town.
#SouthLebanon#Khiam#LebanonUnderAttack#Israel