Что делать если нужно поставить какую-то 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
The Battle of Verdun
A French soldier looking at the remains of a leg that still has a boot on during the Battle of Verdun, 1916.
108 years ago today, the Battle of Verdun, one of the longest and bloodiest battles of World War I, came to an end. The battle lasted for 10 months and resulted in over 700,000 casualties, including some 300,000 killed.
#war#verdun#ww1
AETATESOLIS
Manfred von Richthofen, known as the Red Baron, was born on 2 May 1892 and died on 21 April 1918. He was a German fighter pilot in World War I and had 80 confirmed victories, the highest of the war. He flew a bright red plane and led the “Flying Circus.” He was respected for his skill. Some stories say he once escorted a damaged enemy plane to safety instead of attacking.
✈️🎖️🛩️
[Read more 1]
[Read more 2]
@googlefactss
#RedBaron#WW1#HistoryFacts#Aviation
If you have ideas or feedback contact us:
@Googlefactss_Feedback_bot
The Christmas Truce happened on December 24th and 25th, 1914. After this, commanders worried soldiers were too friendly with the enemy. They moved troops to new places to stop this. They also gave orders starting early 1915 to stop soldiers from talking or being nice to the enemy. This was to keep soldiers ready to fight. Some short breaks in fighting still happened later in the war.
[Read more]
@googlefactss🎄⚔️🚫
#ChristmasTruce#WW1#Military#History#Peace
"Тяжка артилерія майбутнього: Листівка 1915 року"
🗺 Німецька імперія, Перша світова війна
📆 1915 рік
🎨 На листівці — троє дітей у формі військ Центральних держав грають війну, сидячи верхи на гарматі. Юний "німець" у пікельгаубе, "австро-угорець" у сірій шинелі та "француз" чи "турок" у червоному фесі — жартівливе зображення ворогів і союзників, об'єднаних у спільній дитячій грі. Підпис говорить: „Schweres Geschütz“ — "Тяжка артилерія".
📖 У цьому наївному сюжеті — глибша іронія війни: навіть діти долучені до уявної битви. Подібні листівки, популярні в тилу, мали як розважальний, так і пропагандистський сенс — нормалізувати війну, перетворити її на гру, в якій навіть малеча бере участь на боці Батьківщини.
📍 "Тяжка артилерія" — це не лише гарматна міць фронту, а й символ ментального озброєння нації з дитинства. Імперська Німеччина виховувала не просто патріотів, а маленьких солдатів духу, що мали продовжити великий похід Рейху в майбутнє.
📰 Часопис ХОРУГВА
✒️ Дописувач @NikonAP
🎨 Реставрація @NikonAP
🤝🏻Співпраця
🔥Бустанути
💬Наш чатик
#WW1#Німеччина#Пропаганда #1915 #ДітиВійни#Артилерія
GERMANY IS A NAIVE PAWN OF THE USA WITH SEEMINGLY NO POWER TO SAVE ITSELF.
The #USA has failed against #Russia:
• It has missed its military target and this failure is damaging America’s prestige as the greatest military power.
• The #sanctions war against Russia are a complete failure. The West is weakened while Russia strengthens. The #IMF figures speak volumes: Germany doesn’t even make the list.
“The primary interest of the United States through the last century-that is, #WW1, #WW2, and the #ColdWar, has been the relationship between Germany and Russia.
If united, those two would be the only power that could threaten us-and so we have to make sure that doesn’t happen.”
George Friedman
The aim is therefore to prevent Germany from teaming up with Russia.
If it is not possible to weaken Russia as a major opponent, there is the option of preventing the alliance by turning #Germany and Russia into enemies and/or destroying Germany (for the third time after 1918 and 1945)
"Лицарі Центральної Єдності: Плакат 1915 року"
🗺 Німецька імперія, Перша світова війна🇩🇪🇦🇹🇭🇺🇹🇷🇧🇬
📆 1915-1916 рік
🎨 На плакаті німецької пропаганди — героїчні постаті у блискучих латах, що символізують Центральні держави. Вони стоять пліч-о-пліч: німець, австро-угорець, осман і болгарин — як орденські брати-хрестоносці, готові дати бій за спільну справу. Над ними — гасло: "Wir Werden Durchhalten!" — "Ми вистоїмо!"
📖 Такий образ мав підкреслити духовну стійкість, єдність і шляхетність мети Центральних держав. Лицарський антураж переносив сучасну війну в рамки епічного хрестового походу проти ворогів імперського порядку: Антанти, революцій і "варварського Сходу".
📍 Плакат працював не лише як інструмент піднесення бойового духу, а й як апеляція до глибинної європейської традиції захисту християнського Заходу. Лицарський кодекс — як альтернатива модерним страхам і хаосу тотальної війни.
📰Часопис ХОРУГВА
✒️ Дописувач @NikonAP
🎨 Реставрація @NikonAP
🤝🏻Співпраця
🔥Бустанути
💬Наш чатик
#ЦентральніДержави#WW1#Німеччина#АвстроУгорщина#Пропаганда#Лицарство#ХОРУГВА