Что делать если нужно поставить какую-то 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
🌎 At the Musonoi mine in the Democratic Republic of the Congo, the mineral cuprosklodowskite forms vivid green crystals rich in uranium. This rare mineral is highly radioactive and prized by collectors, but handling it requires special care because of its radioactivity. ✨
#minerals⚡#crystals⚡#geology
👉subscribe Interesting Planet
👉more Channels
🌎 At Canada’s Mount Saint-Hilaire, the mineral serandite forms pinkish-orange crystals that are so rare, top-quality specimens are found only at this site. Serandite is a sodium, calcium, and manganese silicate, prized by collectors for its vibrant color and crystal shapes. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 The world's rarest mineral is kyawthuite, a reddish-orange crystal discovered in Myanmar. Only one confirmed specimen exists, weighing just 1.61 carats, and it is made of bismuth, antimony, and oxygen. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 Tanzanite is a vivid blue-violet mineral found only in a small area near Mount Kilimanjaro, Tanzania. This rare crystal is a variety of zoisite colored by trace amounts of vanadium. The entire world’s supply comes from a mining zone just 7 kilometers long. ✨
#minerals⚡#crystals⚡#geology
👉subscribe Interesting Planet
👉more Channels
🌎 In the Himalayas, rare crystal minerals like cavansite and scolecite form in volcanic rock cavities. Cavansite appears as brilliant blue clusters, while scolecite grows in needle-like sprays. Some Himalayan cavansite crystals are less than a few millimeters wide. ✨
#minerals⚡#crystals⚡#geology
👉subscribe Interesting Planet
👉more Channels
🌎 Bhutanite is an exceptionally rare mineral discovered in the Himalayan mountains of Bhutan. It forms metallic blue-gray crystals and contains copper, bismuth, and sulfur. Fewer than a dozen confirmed specimens exist worldwide, making it highly prized among mineral collectors. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 In 2009, the mineral putnisite was discovered in Western Australia. This vibrant purple mineral forms tiny cubic crystals and contains strontium, calcium, chromium, sulfur, oxygen, hydrogen, and carbon. Unlike any known mineral group, putnisite’s unique chemical structure has fascinated mineralogists worldwide. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 Hidden deep in Greenland’s Ilímaussaq complex, the mineral arfvedsonite forms striking blue-black crystals. This rare silicate mineral is found mainly in alkaline igneous rocks and is prized by mineral collectors. Some arfvedsonite crystals can reach lengths over 30 centimeters. ✨
#minerals⚡#crystals⚡#geology
👉subscribe Interesting Planet
👉more Channels
🌎 Some of Earth’s rarest minerals include fingerite, found only near one volcano in El Salvador, and red beryl, which forms under extreme volcanic conditions in Utah. Fewer than one red beryl crystal is found for every 150,000 diamonds. ✨
#minerals⚡#crystals⚡#geology
👉subscribe Interesting Planet
👉more Channels
🌎 In Greenland, the mineral tugtupite glows bright pink or red under ultraviolet light due to its unique crystal structure. This rare silicate forms in only a few places worldwide and is prized for use in jewelry. Tugtupite was first identified in 1962, and gem-quality stones are especially sought after by collectors. ✨
#geology⚡#minerals⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 In Pakistan’s Balochistan province, the mineral rehmeyerite is so rare that only a handful of crystals have ever been found. Rehmeyerite forms as thin, metallic blades containing selenium, and its largest specimens rarely exceed a few millimeters in length. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet
👉more Channels
🌎 The mineral cobaltite is prized by collectors for its metallic silver-gray cubes with a pinkish hue. Found mainly in Sweden, Norway, and Canada, cobaltite is a rare source of the metal cobalt, essential for rechargeable batteries and jet engine alloys. Its crystals rarely exceed 2 centimeters in size. ✨
#minerals⚡#geology⚡#crystals
👉subscribe Interesting Planet