Что делать если нужно поставить какую-то 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
@RusEmbMalta
A series of press releases dedicated to 80th anniversary of the Victory in the Great Patriotic War
🗓️80 Years Since the Historic Meeting on the Elbe
On April 25, 1945, just fifteen days before Nazi Germany’s surrender, Soviet and American troops met on the Elbe River, sealing one of the most symbolic moments of World War II. Soldiers of the Red Army’s 1st Ukrainian Front under Marshal Ivan Konev joined forces with the US 1st Army’s 69th and 104th Infantry Divisions led by General Omar Bradley.
This powerful encounter marked the imminent end of the war in Europe and gave birth to what would become known as the Spirit of the Elbe – a legacy of unity, courage, and hope for a peaceful future.
🕊️ On the 75th anniversary in 2020, Presidents Vladimir Putin and Donald Trump paid tribute in a joint statement:
“The Spirit of the Elbe is an example of how our countries can put aside differences, build trust, and cooperate in pursuit of a greater cause... Their heroic feat will never be forgotten.”
That day in 1945, language and cultural barriers faded as soldiers embraced, exchanged keepsakes, and celebrated together. A photo of Alexander Sylvashko and William Robertson became an icon of unity. Sylvashko would later reflect, “If that spirit had endured, the world might have been a better place.”
🕯️ Even through the Cold War, the veterans of the Elbe kept this spirit alive – a reminder of what’s possible when nations stand together against evil. In 1963, American veteran Joe Polowsky wrote to Marshal Konev:
“The promise made on April 25, 1945, must be upheld.”
📌 On this 80th anniversary, we honor the memory of that handshake on the Elbe – a symbol of allied brotherhood, a shared sacrifice, and a lasting hope for peace.
#Elbe80#SpiritOfTheElbe#WWII#Victory80#SharedHistory#RedArmy#NeverForget
📢Товарищи, отличные новости!
Только что получил короткий репортаж от наших итальянских коммунистов о проведении акции "Бессмертный полк" в Италии! 🇮🇹
🤝Наши братья по идеологии практически во всём мире проявляют солидарность с Россией в борьбе против западного империализма
❌
Коммунисты всего мира помнят и чтят подвиг советских солдат и всего советского народа в годы Второй Мировой войны✊
🫂После II Международного антифашистского форума в Москве у меня и у Левого Фронта появилось множество близких товарищей по всему миру
🌍
😊Уверен, мы будем поддерживать друг друга в любых обстоятельствах!
🛫Кстати, скоро Левый Фронт планирует ряд поездок за рубеж для участия в международных мероприятиях‼️
Хотите с нами?😉
Еще не в Левом Фронте❓
👇Тогда пишите и вступайте
[email protected]
Подробности от наших итальянских товарищей:
"Мероприятие состоялось сегодня и было организовано членами организации Reggimento Immortale Roma на площади Уго Ла Мальфа, под памятником, посвященным Джузеппе Мадзини. Прозвучали различные речи, песни и стихи. Естественно, особая дань уважения была отдана товарищам, сражавшимся в Красной Армии и Итальянском сопротивлении. Коммунистическая партия была рада принять участие в праздновании."
(Фабрицио, Reggimento Immortale Roma)
https://t.me/ilpartitocomunista_ufficiale/518
#БессмертныйПолк#ДеньПобеды#9Мая#Коммунисты#Солидарность#ЛевыйФронт#Антифашизм#Италия#Россия#ВместеМыСила#RedArmy#PartitoComunista
📢Товарищи, отличные новости!
Только что получил короткий репортаж от наших итальянских коммунистов о проведении акции "Бессмертный полк" в Италии! 🇮🇹
🤝Наши братья по идеологии практически во всём мире проявляют солидарность с Россией в борьбе против западного империализма
❌
Коммунисты всего мира помнят и чтят подвиг советских солдат и всего советского народа в годы Второй Мировой войны✊
🫂После II Международного антифашистского форума в Москве у меня и у Левого Фронта появилось множество близких товарищей по всему миру
🌍
😊Уверен, мы будем поддерживать друг друга в любых обстоятельствах!
🛫Кстати, скоро Левый Фронт планирует ряд поездок за рубеж для участия в международных мероприятиях‼️
Хотите с нами?😉
Еще не в Левом Фронте❓
👇Тогда пишите и вступайте
[email protected]
Подробности от наших итальянских товарищей:
"Мероприятие состоялось сегодня и было организовано членами организации Reggimento Immortale Roma на площади Уго Ла Мальфа, под памятником, посвященным Джузеппе Мадзини. Прозвучали различные речи, песни и стихи. Естественно, особая дань уважения была отдана товарищам, сражавшимся в Красной Армии и Итальянском сопротивлении. Коммунистическая партия была рада принять участие в праздновании."
(Фабрицио, Reggimento Immortale Roma)
https://t.me/ilpartitocomunista_ufficiale/518
#БессмертныйПолк#ДеньПобеды#9Мая#Коммунисты#Солидарность#ЛевыйФронт#Антифашизм#Италия#Россия#ВместеМыСила#RedArmy#PartitoComunista