Что делать если нужно поставить какую-то 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
"In a tragic accident, a life was lost in an instant—without any fault of his own.
This heartbreaking event is a stark reminder of how fragile life can be.
It underscores the critical importance of life insurance. To truly protect your loved ones, you should have coverage that's at least 250 times your monthly income.
This ensures that your family's financial stability is preserved, even in your absence.
The best time to secure life insurance was yesterday. The next best time is NOW."
#Accident
🇺🇸🏎 Au moins 27 véhicules se sont heurtés lors d'une course automobile Nascar aux États-Unis. La course a été temporairement suspendue, puis a repris.
#accident#voiture#étatsunis
🏎 Le bolide du pilote français Pierre Gasly s’est retourné lors du Grand Prix de Miami comptant pour le championnat du monde de Formule 1.
Il est entré en collision avec le véhicule du Néo-Zélandais Liam Lawson, de Racing Bulls. Les deux pilotes ont été contraints à abandonner la course.
#formule1#accident
🇮🇷 Un hélicoptère militaire s'est écrasé en Iran dans la province d'Ispahan à cause d'une défaillance technique. En conséquence, quatre personnes sont décédées, a signalé l'agence de presse IRNA.
Le pilote et le copilote sont morts. D’après les pompiers, deux vendeurs ont également péri.
#iran#hélicoptère#accident
🇯🇵 Un accident de la route impliquant plusieurs véhicules, dont un minibus transportant des écoliers, s'est produit dans la préfecture japonaise de Fukushima, a signalé la chaîne NHK.
D’après les informations de la police, l'accident a eu lieu près de la localité d'Inawashiro. En conséquence, au moins une personne est décédée et 26 autres ont été blessées, dont certaines gravement.
#japon#accident#bilan
Série noire en Espagne : un second accident grave ferroviaire 48 h après le drame d'Adamuz.
En Catalogne (Gelida, près de Barcelone), un train de banlieue a heurté un mur de soutènement effondré sur les voies (probablement à cause des pluies), causant 1 mort (le conducteur) et au moins 15 blessés, dont 4 graves.
Cela survient deux jours après la grave catastrophe ferroviaire d'Adamuz (Andalousie), où une collision entre deux trains à grande vitesse a fait 42 morts et plus de 150-292 blessés (dont une quarantaine graves).
Ce drame est la conséquence d'un déraillement dû à un défaut sur les rails (joint de rail cassé ou rupture de 30 cm signalée), possiblement lié à l'usure ou à la hausse du trafic.
L’Espagne est sous le choc.
Trois jours de deuil national.
La population oscille entre deuil, entraide et colère sur la sécurité ferroviaire. Gelida renforce le sentiment d’insécurité nationale.
https://www.lefigaro.fr/international/espagne-un-train-heurte-un-mur-effondre-sur-les-voies-en-catalogne-plusieurs-blesses-20260120
#ferroviaire#Espagne
#accident
Rejoignez-nous 👇
https://t.me/nemesisiam
🇧🇬 En Bulgarie, deux personnes ont été tuées et neuf autres blessées dans un accident de la route impliquant un bus ukrainien, rapporte la télévision nationale bulgare.
Le bus touristique s’est arrêté en raison d’un manque de carburant, et lorsque les passagers sont descendus, il est reparti en marche arrière de manière incontrôlée, les percutant. Les faits se sont produits près du poste-frontière de Malko Tarnovo, non loin de la frontière bulgaro-turque.
#accident#victimes#route
🇮🇳 Au moins 10 personnes ont été tuées plus de 40 autres blessées à la suite d’une explosion dans une centrale thermique de la société Vedanta Limited dans l’État indien du Chhattisgarh, ont fait savoir les autorités de l’État.
Selon les premières informations, l’explosion s’est produite dans une chaudière de la centrale. Une opération de sauvetage est en cours, des personnes pourraient se trouver sous les décombres.
Les blessés ont été transportés dans les hôpitaux voisins. Les autorités de l’État ont commencé à déterminer les causes de la catastrophe.
#inde#accident#morts
#跳伞 有风险,入行续谨慎。网红迪迪跳伞疑似受伤。万幸无大碍 #事故
#Skydiving is risky, proceed with caution. Internet celebrity Didi appeared to be injured during a skydiving incident. Fortunately, he is unharmed. #Accident
🇧🇩 Au moins 18 personnes ont perdu la vie après qu’un bus de passagers est tombé dans le fleuve Padma, dans le centre du Bangladesh, rapporte le journal The Daily Star.
Le bus, transportant environ 40 passagers, est tombé dans le fleuve alors qu’il se trouvait sur un ponton en attente d’embarquement sur un ferry. Onze passagers ont réussi à regagner la rive par leurs propres moyens.
Les secours ont remonté le bus du fond du fleuve six heures après l’accident, retrouvant 18 corps sans vie. Plusieurs passagers sont toujours portés disparus.
#bangladesh#bus#accident
🇧🇮 Les explosions survenues dans la capitale économique du Burundi, Bujumbura, ont été causées par un incendie dans un dépôt de munitions, a rapporté l’Agence France-Presse, citant le porte-parole de l’armée.
Un grave accident électrique dans le magasin des munitions de la FDNB [Force de défense nationale du Burundi] basé à Musaga est à l'origine des explosions entendues en ce moment dans la capitale économique Bujumbura,
a commenté le porte-parole de l'armée burundaise Gaspard Baratuza.
#burundi#explosions#accident