Что делать если нужно поставить какую-то 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 mosquito thought it had found the perfect breeding grounds to raise an army… but every step was BLOCKed 🚫🦟
🔴 𝗕reak up hardened soil
🔴 𝗟ift and empty flowerpot plates
🔴 𝗢verturn pails and wipe their rims
🔴 𝗖hange water in vases
🔴 𝗞eep roof gutters clear and place BTI insecticide
Let’s #BLOCKDengue together 👉go.gov.sg/dengue-checklist
Doing your last round of spring cleaning before the Lunar New Year? Don’t forget to remove all stagnant water. Let’s bring in good health and fortune, not mosquitoes. 🚫🦟
Check out more dengue prevention tips at go.gov.sg/dengue-checklist#BLOCKdengue
Dengue and Zika, transmitted by Aedes mosquitoes, can cause serious health issues. Although rare, Zika virus infection can cause microcephaly in unborn babies of pregnant women. #BLOCKdengue and Zika weekly. Protect yourself with "S-A-W": go.gov.sg/dengue-zika
Out of sight, out of mind? Make sure you don’t leave your home’s roof gutters unattended.
If it gets clogged with fallen leaves, the accumulated water may become the perfect breeding ground for Aedes mosquitoes.
So, make sure to keep your roof gutters clear and place BTI insecticide. Let’s continue to B-L-O-C-K dengue and Zika at least once a week.
✅ Break up hardened soil
✅ Lift and empty flowerpot plates
✅ Overturn pails and wipe their rims
✅ Change water in vases
✅ Keep roof gutters clear and place BTI insecticide
Part of the ASEAN Dengue Day series to raise awareness on dengue prevention, check out our earlier posts too! #BLOCKDengue
Love keeping flowers around to brighten up your home? Don’t forget to change the water in flower vases every other day, so that they don’t become mosquito breeding habitats.
Let’s continue to B-L-O-C-K dengue and Zika at least once a week.
✅ Break up hardened soil
✅ Lift and empty flowerpot plates
✅ Overturn pails and wipe their rims
✅ Change water in vases
✅ Keep roof gutters clear and place BTI insecticide
#BLOCKDengue
Pretty sure that your pails are free from stagnated water? But you’ll never know when water might drip and accumulate.
Overturn pails and wipe their rims to be doubly sure!
Let’s continue to B-L-O-C-K dengue and Zika at least once a week.
✅ Break up hardened soil
✅ Lift and empty flowerpot plates
✅ Overturn pails and wipe their rims
✅ Change water in vases
✅ Keep roof gutters clear and place BTI insecticide
#BLOCKDengue
Excess water accumulated in flowerpot plates is the perfect breeding ground for the Aedes mosquitoes. So, don’t forget to lift and empty flowerpot plates every other day.
Let’s continue to B-L-O-C-K dengue and Zika at least once a week.
✅ Break up hardened soil
✅ Lift and empty flowerpot plates
✅ Overturn pails and wipe their rims
✅ Change water in vases
✅ Keep roof gutters clear and place BTI insecticide
#BLOCKDengue
It’s ASEAN Dengue Day! Observed every 15 Jun, it raises awareness on ways to prevent dengue.
Let’s continue to B-L-O-C-K dengue and Zika at least once a week. Learn more about dengue prevention here: go.gov.sg/mozzieproof#BLOCKDengue
‘Little but lethal’, the small female Aedes aegypti mosquito transmits the Dengue virus that can be deadly. Launched today, NEA’s National Dengue Prevention Campaign 2023 aims to rally the community to take immediate action to reduce the continued high number of dengue cases.
All of us need to do our part to #BLOCKdengue, and those residing in dengue cluster areas should carry out the ‘S-A-W’ actions to protect themselves and their loved ones. More at https://go.gov.sg/dengue-campaign-launch-mar2023
⚠️ Dengue alert! Set up alerts on the myENV app to find out if the places you live and work in, or frequent for leisure activities, have a higher dengue risk. #BLOCKDengue
#SGDengueUpdate 211 new dengue cases and 41 active dengue clusters were reported in the week ending 15 Jul 2023.
Let’s continue to actively #BLOCKDengue: https://go.gov.sg/mozzieproof
#SGDengueUpdate 235 new dengue cases and 44 active dengue clusters were reported in the week ending 8 Jul 2023. No new Zika cases were reported.
Let’s continue to actively #BLOCKDengue: https://go.gov.sg/mozzieproof