Что делать если нужно поставить какую-то 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
This World Environment Day, let’s do our part to #BeatPlasticPollution together.
Simply bring along reusable bags and containers wherever you go to reduce your reliance on disposables. Let’s #ChooseReusables and work #TowardsZeroWaste together!
Check out some tips here: https://www.youtube.com/playlist?list=PLPX9rYUbMZF2Ofk62WvXxsv0vXR6Sh6CU
🌳🏃🏻♂️ Плоггинг — уникальное событие, объединяющее бег и заботу об окружающей среде! Присоединяйтесь 4 июня и помогите сохранить чистоту нашего города! Все собранные материалы будут переданы на переработку.
🏃♂️ Участие бесплатное! Собравшие больше всех пластика получит призы:
1️⃣ место — 3 000 000 сумов
2️⃣ место — 2 000 000 сумов
3️⃣ место — 1 000 000 сумов.
💚 Как принять участие?
• Зарегистрируйтесь
• Пробегите или пройдите любое расстояние до пункта приема, собирая мусор вдоль пути.
• После сдачи собранного мусора и публикации ваших достижений в социальных сетях вы получите футболку, шопер и кепку.
• Вы можете начать своё движение с пункта приема мусора, и тогда вас обеспечат перчатками и мусорными пакетами.
📸 Делитесь фотографиями в соцсетях с хештегами #beatplasticpollution#бойзагрязнениюпластиком, отмечайте организатора @ecogov.uz и партнёров @cocacola_uzbekistan, @prorun.uz
📍 Место и ⏰ приема: Центральный экопарк Ташкента имени Бабура с 7:00 до 20:00.
♻️5 июня — Всемирный день окружающей среды
Каждый год в мире производится более 400 миллионов тонн пластика, при этом половина из него предназначена для одноразового использования. К сожалению, перерабатывается менее 10%. Ежегодно около 11 миллионов тонн пластика попадает в водоёмы — это эквивалентно весу 2 200 Эйфелевых башен.
🧬 Микропластик — частицы размером менее 5 мм — проникает в пищу, воду и воздух. По оценкам, каждый человек ежегодно непроизвольно потребляет более 50 000 таких частиц, и ещё больше — при вдыхании.
🗻 Пластиковое загрязнение угрожает не только здоровью человека, но и всей экосистеме планеты — от горных вершин до морского дна.
🌍 В этом году Всемирный день окружающей среды проходит под девизом #BeatPlasticPollution. Цель — напомнить о нашей общей ответственности в борьбе с пластиковым кризисом, внедрить предлагаемые решения и двигаться к устойчивому будущему.
⏳ Времени почти не осталось. Если не начать действовать сегодня, завтра может быть уже поздно. Изменение климата и экологический кризис требуют срочных мер.
📣 Откажитесь, уменьшите, используйте повторно, переработайте и переосмыслите. Каждый маленький шаг имеет значение и приближает нас к большим переменам.
#WorldEnvironmentDay#GenerationRestoration
♻️5-iyun – Butunjahon atrof-muhit kuni
Hozirda dunyo bo‘yicha har yili 400 million tonnadan ortiq plastik ishlab chiqariladi. Shuning yarmi faqat bir marta foydalanish uchun mo‘ljallangan. Afsuski, ulardan atigi 10 foizigina qayta ishlanadi. Har yili 11 million tonna plastik suv havzalariga tushadi — bu 2 200 ta Eyfel minorasining og‘irligiga teng.
🧬 Mikroplastikalar — 5 mm dan kichik zarrachalar — ovqat, suv va havoga aralashib, har bir inson tanasiga yiliga o‘rtacha 50 000 dona plastik zarracha kirishiga sabab bo‘lmoqda.
🗻 Plastik ifloslanishi nafaqat inson salomatligi, balki butun sayyoramizdagi ekotizimlarga tahdid solmoqda — tog‘lar cho‘qqisidan to okean tubigacha.
🌍 Bu yilgi Atrof-muhit kuni #BeatPlasticPollution shiori ostida o‘tkazilmoqda. Maqsad — plastikka qarshi kurashda har birimizning mas’uliyatimiz borligini eslatish, taklif etilgan yechimlarni keng joriy etish va barqaror kelajak sari harakat qilish.
⏳ Vaqt juda kam. Iqlim o‘zgarishi va atrof-muhit inqiroziga qarshi kurashni bugunoq boshlamasak, ertaga kech bo‘lishi mumkin.
📣 Siz ham rad eting, kamaytiring, qayta foydalaning, qayta ishlang va qayta o‘ylang. Har bir kichik qadam katta o‘zgarishlarga olib keladi.
#WorldEnvironmentDay#GenerationRestoration