Что делать если нужно поставить какую-то 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
Altocumulus clouds putting on a post-storm sunset show! 🌅☁️
After a thunderstorm mid-level clouds like altocumulus are often spotted. These clouds are the ideal backdrop for vibrant skies because they catch sunlight, creating those deep, fiery colours we love.😍#WeatherWednesday
#WeatherWednesday Planning for an outdoor adventure? This message is for you!
While some UV exposure is important for health functions, excessive exposure may be harmful to your skin and eyes. Minimise the effects by:
✅ Using sunscreen (at least SPF 30)
✅ Using an umbrella and seeking shade
✅ Wearing sunglasses that block UVA/UVB rays
✅ Wearing a broad-brimmed hat
#WeatherWednesday. With climate change, many countries in the world are seeing rising temperatures. ☀️🌡️
Minimise your risks of heat stress and heat-related illnesses, with the Heat Stress Advisory on myENV app (www.nea.gov.sg/myENV) or www.weather.gov.sg.
Get helpful tips on how you can adjust your activities, take protective actions, and wear appropriate attire depending on the prevailing heat stress levels.
Before heading out for prolonged outdoor activities, check out tips on how you can adjust your activities, take protective actions and wear appropriate attire depending on the prevailing heat stress levels on myENV app or www.weather.gov.sg.
#WeatherWednesday
#WeatherWednesday Mark your calendars, we're counting down to the celestial spectacle in the night sky! The Harvest Moon 🌕 is set to grace us with its luminous presence on 29 Sep 2023.
Share your best photos using #WeatherWednesday and stand a chance to be featured! 📸✨
For those who answered A, B or C, you may be experiencing pareidolia! It is the term used for the human tendency to see a specific image in random visual patterns. Most of us have experienced it at least once! #WeatherWednesday
Have you ever seen a faint coloured ring circling the sun? These are halos, which are formed by the refraction of sunlight through ice crystals in high-level clouds.
P.S. Remember not to look directly at the sun!
#WeatherWednesday
Have you ever spotted a funnel of water out at sea? This is a waterspout - a rotating column of air that descends from the base of a thunderstorm cloud. They are usually short-lived, lasting between 10 to 30 minutes before quickly dissipating when it nears the coast.
There are an average of 3 occurrences of waterspouts in waters off Singapore per year. If you see one, exit the waters quickly as they can move at speeds up to 80km/h!
#WeatherWednesday
Ever noticed that it gets foggy after prolonged or heavy rainfall? This is because the air is saturated with water vapour, which then condenses around the dust particles in the air, and clumps together. Hence, the fogginess!
#WeatherWednesday
#WeatherWednesday Lightning strikes emit electromagnetic waves that can be detected by a ground-based lightning detection sensor.
Singapore has 4 ground-based sensors which triangulate each strike and determine their location & characteristics! Learn more: go.gov.sg/weather-instruments
#WeatherWednesday How many hours of sunlight do we get? The sunshine recorder measures just that!
As the sun’s rays pass through the instrument’s glass globe, it burns a hole on a recorder card placed at its base.
Learn more at go.gov.sg/weather-instruments