Что делать если нужно поставить какую-то 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
🚨الخارجية الفرنسية: الوزيران الفرنسي والباكستاني أكدا أهمية إدراج لبنان ضمن بنود وقف إطلاق النار لضمان استمراره
French Foreign Ministry:
The French and Pakistani ministers emphasized the importance of including #Lebanon within the ceasefire terms to ensure its sustainability.
ــــــــــــــ
📲 قناة موقع بنت جبيل على واتساب
https://whatsapp.com/channel/0029VaG3H3R8fewmfDqRKX0Q
🇮🇷🇮🇷 Islamic Revolutionary Guard Corps (IRGC): We will fulfill our duty toward #Lebanon, respond to the aggressors, and make them regret [their actions].
—❗🇱🇧/🇮🇱NEW: Israeli media talking about a security event in southern #Lebanon and families of the iof soldiers were notified.
According to the report, At least 5 military helicopters in evacuation operations in southern Lebanon.
@AlHaqNews
🇵🇰🇮🇷🇱🇧🔻Pakistan’s Minister of Defense, H.E KHAWAJA MUHAMMAD ASIF: Israel is an evil and a curse on humanity. While peace talks are underway, it commits genocide in #Lebanon.
@AlHaqNews
🇱🇧🇱🇧Hussein Wahib Yassin (Haj Abu Mohammad Habib), a senior commander of Hezbollah, was martyred as a result of an airstrike by the Zionist regime’s army on southern Lebanon.
🟡 Martyr Yassin was from the town of Majdel Selm in southern Lebanon and was an experienced field commander of Hezbollah. His record includes participation in the 33‑day war, the Battle of Al‑Aqsa Storm on the southern Lebanon front, the Syrian war, and accompanying the martyred commanders Haj Qasem Soleimani and Haj Emad Mughniyeh.
🟡 The exact time and place of this mujahid commander’s martyrdom are not specified.
#Lebanon
🇱🇧 According to a new report from the Lebanese Ministry of Health, the death toll from yesterday’s Israeli attacks on Lebanon has now reached 303 martyrs, with over 1,150 wounded.
✍️ Unfortunately, the casualty count continues to rise. Hezbollah, without any support from Lebanon’s incompetent government, is defending the country’s soil and its people.
#Lebanon
🇱🇧#Lebanon: The statue of Jesus Christ which was destroyed by an IDF soldier was replaced yesterday by a new one which was donated by Italian UNIFIL troops.
🇱🇧#Lebanon: Lebanon’s prime minister has reportedly ordered the Lebanese Army to deploy across Beirut to ensure that only official armed forces have access to weapons, restricting possession exclusively to state security institutions.
The government has also decided to file an urgent complaint with the United Nations Security Council in response to Israel’s indiscriminate attacks on civilian infrastructure in Lebanon.
At the start of the session, the PM stated that Lebanon is "tired of mere statements of condemnation", expressing frustration that the country was not included in the ceasefire announced between the US and Iran.
(via MTV news)
🇱🇧#Lebanon: The pro-Iranian hacktivist group "Fatemiyoun Electronic Team" (FET) targeted the website of MTV Lebanon overnight, issuing threats against the channel and causing a temporary outage.
The group carries out digital attacks on behalf of the Iraqi militia "Kataib Hezbollah" (also known as Hezbollah Brigades), which is part of the Popular Mobilization Forces (PMF).
(via @LebOSINT on X)