Что делать если нужно поставить какую-то 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
🇹🇷 Au moins sept personnes ont été tuées et autant ont été blessées dans une collision sur une route reliant Antalya à Isparta, dans le sud de la Turquie, a rapporté la chaîne de télévision TRT Haber.
#turquie#collision#victimes
🪐 The galaxy known as the Tadpole Galaxy (UGC 10214), about 420 million light-years away in the constellation Draco, is famous for its long, sweeping tail that stretches over 280,000 light-years. This striking "tadpole" shape was created when another galaxy passed close by, pulling out a stream of stars, gas, and dust—a cosmic encounter that gave the Tadpole Galaxy its unforgettable, bizarre silhouette among the galaxies. ✨
#galaxies⚡#shapes⚡#collision⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
👉more Channels
🇫🇷 La situation sur les lieux de la collision entre un train à grande vitesse (TGV) et un poids lourd transportant du matériel militaire dans la commune de Nœux-les-Mines (Pas‑de‑Calais), dans le nord de la France.
#france#train#collision
🇺🇸🛬 Deux personnes ont perdu la vie et plus de dix ont été blessées dans la collision entre un véhicule et un avion à l'aéroport LaGuardia de New York. Au total, au moins 41 personnes avaient initialement été hospitalisées, a indiqué la directrice exécutive de l'Autorité portuaire de New York et du New Jersey, Kathryn Garcia.
#étatsunis#avion#collision#bilan
🇮🇩Le bilan de la collision entre deux trains dans la province de Java occidental en Indonésie s’alourdit à 14 morts et 84 blessés, a rapporté l’agence Antara.
#indonésie#trains#collision
🇮🇩 Au moins 3 personnes ont été tuées et 29 autres blessées dans une collision entre deux trains en Indonésie, rapporte Antara.
#indonésie#trains#collision
🪐 The asteroid (234) Barbara is a main-belt asteroid with a unique, highly irregular shape that may be the result of an ancient cosmic collision. At over 45 kilometers wide, Barbara is notable because radar observations revealed its silhouette resembles two objects fused together, an unusual configuration that would cause catastrophic damage if an object like this ever entered a path toward Earth. ✨
#asteroids⚡#threat⚡#collision⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
👉more Channels
🇺🇸 Deux bus sont entrés en collision près du Pentagone, faisant plus de 20 blessés. Selon la chaîne WUSA9, au moins dix des blessés sont des employés du département de la Défense américain.
La police du Pentagone a confirmé l'information et a annoncé la fermeture complète du terminal de transport et de la station de métro situés à proximité du département.
#bus#collision#pentagon
🇺🇸🇨🇦Un avion d'Air Canada Express est entré en collision avec un véhicule de piste sur le tarmac à l'aéroport LaGuardia (LGA) de New York, entraînant une fermeture temporaire, rapporte le service de suivi des vols Flightradar sur le réseau social X.
Selon le journal New York Post, au moins quatre personnes ont été blessées, tandis que la chaîne NBC News a rapporté la mort du pilote et du copilote de l’aéronef.
#étatsunis#avion#tarmac#collision
🇩🇰 Une collision frontale entre deux trains survenue près du village de Kagerup, au Danemark, a fait dix-sept blessés, dont quatre personnes se trouvent dans un état critique, a rapporté l’agence Ritzau.
#danemark#trains#collision#victimes