Что делать если нужно поставить какую-то 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 story has always been there.
DeckForge is more than just a game.
It’s a world with its own rules, its own power, and its own history.
Until now — you’ve only seen the surface.
But starting this week, the veil begins to lift.
We’ll reveal the origins.
The forces at play.
The Forge at the center of it all.
Welcome to the beginning of DeckForge lore.
Stay tuned — the world is about to speak..
#DeckForge#LoreUnfolds#NewChapter
Join the DeckForge Community:
🌐YouTube𝕏Twitter
👉Chat👉Announcements
🇷🇺❤Today marks a monumental chapter in my journey, as I proudly announce that I've become a Russian citizen and participated in my very first election here.
This significant step is more than just a formal process; it symbolizes my deep connection and commitment to my new home, its people, and its future. As I stood in the polling station, casting my vote, I was overwhelmed with a sense of responsibility and belonging.
This act of civic engagement is a powerful reminder of the role we each play in shaping the course of our community and nation. It's a day filled with emotions - pride, hope, and anticipation for what lies ahead.
Joining my fellow citizens in this democratic process, I felt a strong bond of unity and shared purpose. Here's to embracing new beginnings, contributing to the collective future, and making every moment count in this beautiful journey.
#Citizenship#ElectionDay#NewChapter#RussianCitizen🇷🇺✨
Sono entusiasta di condividere un nuovo capitolo del mio personale brand journey! 🚀 Con grande orgoglio, annuncio il mio recente "upgrade" strategico dello stile personale: ho scelto di vestirmi, un passo fondamentale per evolvere il mio stato da "nudo" a "diversamente nudo". 👔✨ Questa scelta si allinea perfettamente con i miei valori di crescita professionale e di impatto visivo, segnando un momento chiave nella mia missione di esprimere al meglio il mio potenziale. 🌟📈#NewChapter#StyleEvolution#PersonalBranding#GrowthMindset
🔄🇺🇿 #15 — 4 Kun ichida 3 ish taklifi: Hayotimdagi yangi bosqich
Oradan 4 kun o‘tgach, men topshirgan Birlashgan Arab Amirliklaridagi kompaniyalardan menga qo‘ng‘iroq bo’ldi. Ular intervyu o‘tkazishdi. Tez orada 3 ta ish taklifini oldim. Qanday ish deb qiziqayotgan bo‘lsangiz, offitsiant (waiter)— bu ishga kirish va ketish uchun eng oson yo‘llardan biri.
Bu jarayon menga sabr, qat’iyat va Allohga tavakkul qilishning ahamiyatini yana bir bor eslatdi. Harakat qilmasdan, faqat orzu qilish bilan hech narsaga erishib bo‘lmaydi. Har bir qadam, har bir qaror — bu yangi imkoniyatlarga yo‘l ochadi.
🔄🇬🇧 #15 — 3 Job Offers in 4 Days: A New Chapter Begins
Just three days later, I received a call from the companies I had applied to in the United Arab Emirates. They conducted an interview, and soon after, I received three job offers. Curious about the role? It's a waiter position — one of the easiest entry points into the job market there.
This experience reminded me of the importance of patience, determination, and placing trust in Allah. Simply dreaming without taking action leads nowhere. Every step, every decision opens doors to new opportunities.
#EverythingILived#TrustInAllah#Action#Dua#Dreams#Dubai#NewChapter
С ВЕСНОЙ ВАС🤍🕊️✨
#highlevel#newchapter#goldenedition
Photobombed me @hristy__🧨
Makeup & hair @elena__muah💋
#muse#яработаюмузой#actress#actrice#model#legslegslegs#elevation#higher#postcard#spring#springspringspring#springfashion#moodoftheday#photography#photooftheday#lady#mademoiselle#purelove#heavenonearth#благодарю#люблю#свеснойвас#доброеутро#petitefemme#mira#женщинамира#карповичмирослава