Что делать если нужно поставить какую-то 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
#vlog
Forgot to share the vlog here! With exams approaching days are going even faster and tomorrow is already December!
While trying to study hard, I am also working on my skills and my side projects. Love college, love life, love my family and friends. And of course love you!
~ 🤓~
↬@jastm1🐰
#vlog
New week, new vlog🍎😁
Did u miss me? I was away during the weekends…
Courses are getting harder and it’s getting harder to film vlogs but I am trying to make them as good as possible 😬
~🐈~
↬@jastm1🌊
#vlog
✨ Another little glimpse into my day ✨
Yesterday was packed with challenges - from a dentist appointment to preparing for upcoming quizzes. It was long, it was busy, and yes, I ended the day completely exhausted. 💗
But here’s the thing: every busy day is also a step forward. Each challenge we push through is shaping us, teaching us resilience, and bringing us closer to our goals. 🎀
So if you’re also feeling tired from studying, working, or just managing life, remember, it’s all part of the journey. Keep going, because the effort you’re putting in today will turn into tomorrow’s growth. 🍵🤩
Let me know if you want more vlogs like this🤎
~🐈~
↬@jastm1🌊
#vlog
Yesterday was a very colorful, interesting, and tiring day. The first day of September turned out pretty productive! I woke up early and prepared for my classes (Algorithms, to be exact
😶). We had a very challenging Algorithms class — I could literally feel my brain frying 😀. Our professor is really funny though, with a Russian accent.
Then I had another class - a core course called Chance. Honestly, I’d call it “a chance for a good sleep.” We have a lovely French professor who’s over 70 and speaks very quietly and slowly
🥲. And since the class is at 2 p.m., you can imagine…
After that class, I was ready to go to my Jiu Jitsu training, but it got canceled. So instead, I helped out at the Student Fest, where all the clubs at our uni gathered to present themselves. Our Central Asian Student Association was there too, and it was so much fun! Everyone waited for somsa and chebureki... I got to meet many new freshmen, and they were super friendly. One of them even turned out to be subscribed to my channel - such an honor honestly
⭐.
So yeah, the day was so tiring it felt like Friday. My roommate and I couldn’t even wake up early today :)
~🐈~
↬@jastm1🌊
#vlog
I am back with another cute vlog 🥰
It was filmed like a week ago. Hope you will enjoy it.
These weeks are very busy and I am filming another long and funny vlog for you! Hopefully I will have time to edit it 🥲
#vlog
My daily routine at university. Everyday is the same :wake up -> eat ->study and that's on repeat.
Right now I am trying to learn and apply as much knowledge as I can, building the necessary foundation for the future internships (hopefully).
Also watching anime about pharmacy girl in ancient times, I LOVE IT 😊.
Yesterday I freaked out and had a good cry because of my cs assignment, but then managed to somehow finish it by 2 am. Now the most challenging part is left - DEBUGGING.
Alhamdullilah for such stability 🍵
~🍋~
↬@jastm1🌊