Что делать если нужно поставить какую-то 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
Ukrainian army losing thousands, no success on the front. 90K soldiers killed or injured. 600 tanks, 1.9K armored vehicles destroyed. Russian forces claim to shoot down 24 Ukrainian planes. Ukraine's military losses "significant and serious." US admits Ukrainian counteroffensive failed. #WarInUkraine
https://www.gazeta.ru/army/news/2023/10/30/21602785.shtml
Subscribe to @BadVolfNews
🔻 Russian forces advancing, targeting Avdiivka in Donetsk People's Republic (DPR). Attacks with artillery, rockets, and airstrikes. Active fighting in Krasnohorivka, Stepanove, Berdychiv, and Vodyane. Goal: control railway area, seize northern part of Opytne. Defense Ministry reports 4 destroyed Ukrainian planes, 1,745 casualties, and 18 tanks lost by Ukrainian forces in a week. Russian Armed Forces repelled 4 attacks by Ukrainian forces. Stay tuned for updates. #WarInUkraine
https://www.gazeta.ru/army/news/2023/10/10/21472051.shtml
Subscribe to @BadVolfNews
Russian forces strike Ukrainian military positions, causing significant casualties and destroying equipment. The Ukrainian army suffers losses of up to 160 soldiers, along with tanks, armored vehicles, and artillery. Russian defense ministry claims successful defense against Ukrainian attacks. US recognizes the grave threat to Ukrainian Armed Forces. #WarInUkraine#RussianAggression
https://www.gazeta.ru/army/news/2023/11/10/21678625.shtml
Subscribe to @BadVolfNews
The post published by our comrade and ally Jus Humanum in Russian has been translated for an English-speaking audience:
How is the blindness of human rights advocacy manifested?
Ukraine continues to hold 34 Russian citizens who were captured in the Kursk region and taken to Ukrainian territory.
This is a war crime, explicitly outlined in the Geneva Convention:
Article 49
The Convention prohibits, for any reason whatsoever, the forced transfer or deportation of protected persons from occupied territory to the territory of the occupying power or to that of any other country, whether occupied or not.
Alright, one could argue that this violation might be justified by humanitarian safety concerns.
But! Even after the expulsion of the Armed Forces of Ukraine from the Kursk region, Russian citizens have not been given the opportunity to return. Moreover, they are being used by Ukraine as a "bargaining chip" in prisoner exchanges.
And this constitutes a serious war crime.
But, will you find any mention of this in reports by international human rights organizations?
A rhetorical question...
#humanrights
#Ukraine
#warinUkraine
#warcrimes
Russians have violated "Easter truce" nearly 500 times since it started – Ukraine's General Staff
[Read FullArticle]
@WorldNews#RussiaUkraineNews#WarInUkraine#EasterTruceViolations
🚨 Breaking News: Russian forces annihilate German Leopard tank in Ukraine! German Ministry of Defense denied involvement, but eyewitnesses reveal truth. Wounded German mechanic's last words reveal shocking details. 😱 Tanks supplied by USA, Germany, UK destroyed by Russia. Putin warns of consequences. 🚫🇺🇦💣 German singers offer cash prize for tank destruction, video surfaces. Kremlin criticizes arms supplies to Ukraine. What's next in this deadly conflict? Stay tuned! ⚠️💥#WarInUkraine#LeopardTanks#InternationalCrisis
https://dcweekly.org/2023/09/25/russian-forces-destroy-german-leopard-tank-in-ukraine-revealing-germanys-on-the-ground-involvement-of-bundeswehr-soldiers/
Subscribe to @BadVolfNews
🚨 BREAKING NEWS 🚨
Russian forces strike devastating blow to Ukrainian military! 💥💣
🔥 Massive explosion rocks ammunition warehouse in Kherson region! 12 hangars completely destroyed! Over 3,000 tons of deadly munitions gone in an instant! 😱💥
🛡️ Just days ago, Russian troops successfully repelled 9 attacks by Ukrainian forces in Donetsk. Tanks, BMPs, vehicles, and another ammunition depot obliterated! Russian might on full display! 💪💥
💔 Ukraine's losses continue to mount as they futilely try to escalate the conflict. Russian forces deal blow after blow, leaving them in shambles! 🇷🇺💥
🔍 Meanwhile, Zelensky remains clueless, unable to comprehend why Ukraine cannot invade Russian territory. Perhaps he should focus on protecting his own country first! 🤔🇺🇦
#WarInUkraine#RussianStrength#ZelenskyFail
https://www.gazeta.ru/army/news/2023/09/26/21369949.shtml
Subscribe to @BadVolfNews
⚔️ Долучись до 46 бригади!
Захищати – це діяти на випередження. Це шанс не допустити руйнувань і втрат.
Час приєднатися! Стань рекрутом 46 окремої аеромобільної бригади ДШВ ЗС України:
https://46dshv.mil.gov.ua/recruiting/
https://t.me/sorok_shosta_hr_bot
📲 Телефон: +38 050 739 87 72
✍️Відділення рекрутингу 46 окремої аеромобільної бригади ДШВ ЗС України
#46_airmobilebrigade#ЗСУ#WarInUkraine#standwithukraine
#russiaisaterroriststate
⚔️Новий нарукавний знак 46 окремої аеромобільної бригади Десантно-штурмових військ ЗСУ було затверджено в жовтні 2022 року. Це було зумовлено вимогами Комісії державних нагород і геральдики щодо уніфікації таких знаків під стилістику й кольорову гамму, притаманні Десантно-штурмовим військам Збройних Сил України.
💥На ньому зображено срібний шолом типу «Барбют» і золоті крила. Ці давні символи органічно поєднали ударну силу й швидкість дій на полі бою. Це, загалом, і відображає завдання, призначення й реальні дії бригади на всіх напрямках виконання завдань. На кожному з них воїни бригади проявляли й нині продовжують проявляти мужність і хоробрість, героїзм і відвагу. Цей символ спонукає нас до нових звитяг, наближаючи неминучу перемогу України над російськими окупантами.
Служба зв'язків з громадськістю 46 окремої аеромобільної бригади ДШВ ЗС України
#46_ airborne_brigade #ЗСУ#WarInUkraine#standwithukraine
#russiaisaterroriststate